使用左表中的值连接两个表

时间:2012-04-08 01:20:49

标签: mysql sql mysql-error-1054

我正在尝试编写一个连接另一个表的查询,但在这种情况下,我需要使用子查询中左表中其中一列的值。在这样做时,我收到一条错误,指出mySQL无法找到具有此名称的列。

首先,这是我的查询引用2个表(t1和t2)(@category是从我的程序中加入的参数):

SELECT t1.incID, t1.name, t1.sortBy, SQ.person, SQ.pointsValue
FROM table1 t1
LEFT OUTER JOIN (
    SELECT incID, person, IF( t1.sortBy=0, max(points), min(points) ) pointsValue
    FROM table2
    GROUP BY incID
) SQ ON SQ.incID = t1.incID
WHERE t1.category=@category
ORDER BY t1.name ASC
LIMIT 0 , 30

现在,当我执行此查询时,会返回以下错误:#1054 - “字段列表”中的未知列't1.sortBy'

如果我用0 = 0替换t1.sortBy = 0,那么查询执行正常,所以看起来我似乎对mySQL的运算顺序感到困惑?

有人可以澄清一下mySQL如何对这样的查询执行操作顺序以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法在派生表中引用外部表。您需要向外移动IF逻辑:

SELECT t1.incID, t1.name, t1.sortBy, SQ.person, 
       IF( t1.sortBy=0, maxPoints, minPoints) pointsValue
FROM table1 t1
LEFT OUTER JOIN (
    SELECT incID, person, max(points) maxPoints, min(points) minPoints
    FROM table2
    GROUP BY incID
) SQ ON SQ.incID = t1.incID
WHERE t1.category=@category
ORDER BY t1.name ASC
LIMIT 0 , 30