Hello Larry,

On 1/28/2013 10:42 AM, Larry Martell wrote:
I have a query that works fine:


SELECT data_ppl.name as 'P/P/L', data_recipe.name as Recipe,
data_cstmeta.date_time as 'Last Run'
FROM data_recipe, data_ppl, data_cstmeta
    INNER JOIN (SELECT id,recipe_id, MAX(date_time) as MaxDateTime
    FROM data_cstmeta
    GROUP BY recipe_id) grouped
    ON data_cstmeta.id = grouped.id
    AND data_cstmeta.date_time = grouped.MaxDateTime
WHERE data_cstmeta.ppl_id = data_ppl.id
AND data_cstmeta.recipe_id = data_recipe.id
ORDER BY data_cstmeta.date_time desc;


Now I need to add one more column to it, data_tool.name, so I did this:


SELECT data_ppl.name as 'P/P/L', data_tool.name as Tool,
data_recipe.name as Recipe, data_cstmeta.date_time as 'Last Run'
FROM data_recipe, data_ppl, data_cstmeta, data_tool
    INNER JOIN (SELECT id,tool_id,recipe_id, MAX(date_time) as MaxDateTime
    FROM data_cstmeta
    GROUP BY recipe_id) grouped
    ON data_cstmeta.id = grouped.id
    AND data_cstmeta.date_time = grouped.MaxDateTime
WHERE data_cstmeta.ppl_id = data_ppl.id
AND data_cstmeta.recipe_id = data_recipe.id
AND data_cstmeta.tool_id = data_tool.id
ORDER BY data_cstmeta.date_time desc;

And now it fails with:

ERROR 1054 (42S22): Unknown column 'data_cstmeta.id' in 'on clause'

I've messed around with this for a day and I can't figure out what
stupid mistake I'm making.


You didn't add just one column, you added an entire table to the FROM clause. Also, you used a comma-join instead of an ANSI JOIN clause.

Because of changes we made in 5.0.12 to make MySQL behave more like the SQL standard requires, the priority of the comma operator in join operations was demoted. This means that when the explicit JOIN declaration is being evaluated (which has a higher order of precedence) only the derived table (grouped) and the base table `data_tool` are visible to the ON clause. The `data_cstmeta` implicit join will be evaluated later as it is based on a comma-join.

I suggest you rewrite your queries to only use the explicit "JOIN ... ON ..." syntax for all of your joins to avoid these problems in the future.
http://dev.mysql.com/doc/refman/5.5/en/join.html

Regards,
--
Shawn Green
MySQL Principal Technical Support Engineer
Oracle USA, Inc. - Hardware and Software, Engineered to Work Together.
Office: Blountville, TN



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

Reply via email to