SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'
但是,我只有1條記錄,其中slugs.name = 'test'
爲真!當只有一條記錄匹配WHERE子句時,JOIN返回多個結果?
這是怎麼回事?
SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'
但是,我只有1條記錄,其中slugs.name = 'test'
爲真!當只有一條記錄匹配WHERE子句時,JOIN返回多個結果?
這是怎麼回事?
其他人則指出你有什麼錯(你得到一個笛卡兒連接),但不知道如何解決它。我們需要知道images
中的行如何與slugs
中的行相關。比如說,如果有一個名爲兩個BingoID
列,應該匹配,則是這樣的:
SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test' AND images.BingoID = slugs.BingoID
,或者
SELECT images.filename, slugs.name
FROM images inner join slugs
ON images.BingoID = slugs.BingoID
WHERE images.status = 1 AND slugs.name = 'test'
感謝您的簡化:) – oaziz 2012-01-06 08:14:39
這是因爲你有一個以上的images.status = 1
:)
您的查詢匹配的所有從表images
有name = 'test'
有status = 1
包含所有行從表slugs
行。
這是正確的,但爲什麼slugs.name ='test'沒有效果? – oaziz 2012-01-06 07:52:04
它有效果。嘗試消除它。你應該把另一個條件與圖像和slu relate相關。 – 2012-01-06 07:54:27
但你可能有兩個image.status = 1。
他們的方式,你寫它,它幾乎是一個完全連接,笛卡爾乘法。
是的,slugs.name ='test'沒有效果!這就是問題。 – oaziz 2012-01-06 07:52:43
它有一個很好的機會做一個隱式的自然連接,因爲你從這樣的兩個表中選擇。
圖像和slu tables表如何相關?我認爲你需要添加一個內部連接,因爲你的查詢將會返回儘可能多的名字爲「test」的slu as作爲圖像表中的條目。
它使交叉連接和圖像表將有多個行,然後創建一個新的表具有乘法no。這兩個表的行由於這個查詢給出了多個結果。
你應該嘗試右外連接來獲得一個結果試試這個
SELECT images.filename, slugs.name FROM images right outer join slugs
on images.ID = slugs.ID
where images.status = 1 AND slugs.name = 'test'
什麼是你回來的結果? – Matthew 2012-01-06 07:48:46
帶有images.status = 1的所有行。 – oaziz 2012-01-06 07:50:13
你有多少張images.status = 1?你沒有明顯地加入這兩張桌子。 – 2012-01-06 07:50:58