2012-10-25 65 views
0

我知道這應該是行得通的,我已經做過好幾百次了,但是今晚(或者早上,取決於你在哪裏)它沒有做它應該做的事情做。MySQL:在查詢多個表時出現奇怪的行爲

我想查詢多個表,但是我遇到了一些困難,所以我減少查詢到了極致:

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

我想引用他們,但沒有成功。現在,第一個陳述出了什麼問題?

+0

你會得到一個語法錯誤嗎?或者只是你不指望的結果? – Randy

+0

什麼不起作用?在沒有連接條件的情況下,您應該獲取行數tasks.id = 1乘以分配的總行數。 –

+0

@Randy「MySQL返回了一個空結果集」是我得到的 – Andrew

回答

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 
+0

如果在查詢時沒有與我的'tasks.id'有關的數據,該怎麼辦?這是否意味着查詢會導致一個空集? – Andrew

+0

@Andrew然後你應該使用一個'LEFT JOIN',這將允許一個空集被連接。查看我的更新。 – Kermit