我知道这应该可行,我之前已经做过数百次,但不知何故今晚(或早上,取决于你在哪里)它没有做它应该做的事情。
我正在尝试查询多个表,但是我遇到了一些困难,所以我减少到最大查询:
SELECT tasks.* FROM tasks, assigned WHERE tasks.id = 1 //not working
SELECT * FROM tasks WHERE id = 1 //working
我尝试引用它们,但没有成功。现在,第一个陈述有什么问题?
我知道这应该可行,我之前已经做过数百次,但不知何故今晚(或早上,取决于你在哪里)它没有做它应该做的事情。
我正在尝试查询多个表,但是我遇到了一些困难,所以我减少到最大查询:
SELECT tasks.* FROM tasks, assigned WHERE tasks.id = 1 //not working
SELECT * FROM tasks WHERE id = 1 //working
我尝试引用它们,但没有成功。现在,第一个陈述有什么问题?
您正在使用隐式连接语法。有了这个,您需要以某种方式加入您缺少的那些表:
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 *
.
更新
如果当时有 intasks
但没有 in的记录,即使 in 中没有记录assigned
,也可以使用LEFT JOIN
which 将返回 in 的记录。tasks
assigned
SELECT tasks.col1
FROM tasks
LEFT JOIN assigned ON assigned.task = tasks.id
WHERE tasks.id = 1