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

标签 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 如何对这样的查询执行操作顺序以及我如何解决这个问题吗?

最佳答案

您不能在派生表中引用外部表。您需要将 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

关于mysql - 使用左表中的值连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059685/

相关文章:

mysql - 特定合并sql中的2列,不包括其中一列

php - 重用 PDO 语句 var 使进程崩溃

sql - 在 postgres 中两个表之间的联接、聚合和转换

MYSQL:错误 1054 - 未知列

c# - 在 C# 中从 MySQL DB 检索特定值

mySQL 从所有者历史记录中加入事务所有者

SQL - 创建数据库并查询它

mysql - SQL,用电子邮件替换部分字符串

mysql - 使用联接、分组依据和全文的 where 子句中的未知列 xxx

mysql - 通用 Mysql 存储过程