0

我知道这应该可行,我之前已经做过数百次,但不知何故今晚(或早上,取决于你在哪里)它没有做它应该做的事情。

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

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

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

4

1 回答 1

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 *.

更新

如果当时有 intasks但没有 in的记录,即使 in 中没有记录assigned,也可以使用LEFT JOINwhich 将返回 in 的记录。tasksassigned

SELECT tasks.col1
FROM tasks
LEFT JOIN assigned ON assigned.task = tasks.id
WHERE tasks.id = 1
于 2012-10-25T18:22:40.857 回答