On Tue, Dec 11, 2012 at 7:22 PM,  <h...@tbbs.net> wrote:
>>>>> 2012/12/11 16:19 -0500, Larry Martell >>>>
> I have this query:
>
> SELECT data_target.name, ep, wafer_id, lot_id,
>        date_time, data_file_id, data_cstimage.name,
>        bottom, wf_file_path_id, data_measparams.name,
>        vacc, data_category.name
> FROM data_cst, data_target, data_cstimage, data_measparams,
>      data_category, data_tool
> WHERE data_cst.target_name_id IN (38018, 29947, 28330)
> AND data_cst.date_time BETWEEN '2012-09-01 00:00:00' AND '2012-09-07 00:00:00'
> AND data_target.id = data_cst.target_name_id
> AND data_cstimage.id = data_cst.image_measurer_id
> AND data_measparams.id = data_cst.meas_params_name_id
> AND data_category.id = data_tool.category_id
> AND data_tool.id = data_cst.tool_id
> ORDER BY target_name_id, ep, wafer_id, lot_id, date_time
>
> My problem is that when data_cst.image_measurer_id is NULL I don't get
> that data_cst row even though all the other part of the where clause
> are TRUE. I understand why that is, but in that case I want the row,
> but with NULL in the data_cstimage.name column. I think I need a left
> outer join, but I've been messing with this for hours, and I can't get
> the syntax right. I've googled it, but all the examples are simple
> with just 2 tables. Can someone help me with this?
> <<<<<<<<
> Modern forms do not give a left join if one uses WHERE-clause to reduce a 
> full cross-join to an inner join. It is better to start with something like 
> this,
>
> FROM data_cst JOIN data_target
> ON data_target.id = data_cst.target_name_id JOIN data_cstimage
> ON data_cstimage.id = data_cst.image_measurer_id JOIN data_measparams
> ON data_measparams.id = data_cst.meas_params_name_id JOIN
>      (data_category JOIN data_tool
> ON data_category.id = data_tool.category_id)
> ON data_tool.id = data_cst.tool_id
>
> but I am not too sure where to bracket "data_tool". When you have put it into 
> a 'FROM'-clause with 'JOIN', not comma, separating the tables, with the same 
> outcome as now, then you have to decide before which 'JOIN' to put the 
> 'LEFT'. Maybe you want it between "data_cstimage" and "data_measparams".
>
> (Are all the distinct "id"s really needed? When one joins on a field with the 
> same name in both tables, one may use 'USING', and only the common field, 
> with neither NULL, shows up in the output.)

I'm not familiar with the USING clause. I'll have to look into that. Thanks!

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to