2012-01-06 75 views
2
SELECT images.filename, slugs.name FROM images, slugs 
WHERE images.status = 1 AND slugs.name = 'test' 

但是,我只有1條記錄,其中slugs.name = 'test'爲真!當只有一條記錄匹配WHERE子句時,JOIN返回多個結果?

這是怎麼回事?

+0

什麼是你回來的結果? – Matthew 2012-01-06 07:48:46

+0

帶有images.status = 1的所有行。 – oaziz 2012-01-06 07:50:13

+0

你有多少張images.status = 1?你沒有明顯地加入這兩張桌子。 – 2012-01-06 07:50:58

回答

7

其他人則指出你有什麼錯(你得到一個笛卡兒連接),但不知道如何解決它。我們需要知道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' 
+0

感謝您的簡化:) – oaziz 2012-01-06 08:14:39

1

這是因爲你有一個以上的images.status = 1 :)

您的查詢匹配的所有從表imagesname = 'test'status = 1包含所有行從表slugs行。

+0

這是正確的,但爲什麼slugs.name ='test'沒有效果? – oaziz 2012-01-06 07:52:04

+0

它有效果。嘗試消除它。你應該把另一個條件與圖像和slu relate相關。 – 2012-01-06 07:54:27

2

但你可能有兩個image.status = 1。
他們的方式,你寫它,它幾乎是一個完全連接,笛卡爾乘法。

+0

是的,slugs.name ='test'沒有效果!這就是問題。 – oaziz 2012-01-06 07:52:43

1

它有一個很好的機會做一個隱式的自然連接,因爲你從這樣的兩個表中選擇。

2

圖像和slu tables表如何相關?我認爲你需要添加一個內部連接,因爲你的查詢將會返回儘可能多的名字爲「test」的slu as作爲圖像表中的條目。

1

它使交叉連接和圖像表將有多個行,然後創建一個新的表具有乘法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' 
相關問題