MySQL:查询多个表时的奇怪行为

时间:2012-10-25 18:18:54

标签: mysql

我知道这应该有效,我已经做了好几百次,但不知何故今晚(或早上,取决于你在哪里)它没有做它应该做的事情。

我正在尝试查询多个表,但是我遇到了一些困难,所以我减少了查询到max:

SELECT tasks.* FROM tasks, assigned WHERE tasks.id = 1 //not working
SELECT * FROM tasks WHERE id = 1 //working  

我尝试引用它们但没有成功。现在,第一个陈述出了什么问题?

1 个答案:

答案 0 :(得分:1)

您正在使用隐式连接语法。有了这个,你需要在某些方面加入你缺少的那些表:

SELECT tasks.*
FROM tasks, assigned
WHERE tasks.id = assigned.task # <-- missing this
    AND tasks.id = 1

您应该练习使用显式JOIN语法(ANSI标准):

SELECT tasks.col1
FROM tasks
JOIN assigned ON assigned.task = tasks.id
WHERE tasks.id = 1

如果您没有从assigned中选择任何内容,为什么要获取该结果集?

此外,您应该使用列列表而不是SELECT *

<强>更新

如果当前tasks中有记录但assigned中没有记录,则可以使用LEFT JOIN,即使没有tasks,也会返回assigned中的记录SELECT tasks.col1 FROM tasks LEFT JOIN assigned ON assigned.task = tasks.id WHERE tasks.id = 1 中的记录。

{{1}}