2016-09-27 74 views
0

當我的突出顯示錶中出現slu I時,我需要從文章和用戶表中獲取行。內部加入返回沒有結果

Highlight Table 

id | slug 
1 blue 
2 green 

Article Table 

id | slug | title 
1 blue 
2 pink 

User Table 

id | slug | name 
1 blue 
2 green 
3 brown 

繼承人我查詢:

SELECT slug from highlight_table 
INNER JOIN article_table ON highlight_table.slug = article_table.slug 
INNER JOIN user_table ON highlight_table.slug = user_table.slug 

我希望得到來自用戶表項目表和id 1和2 ID 1。

問題是我沒有從查詢中得到任何回報。

回答

1

因爲你SELECT slug是模糊的查詢有錯誤。您的列slug出現在您的所有表中,因此MySQL不知道要返回哪一列。你需要做的

SELECT `highlight_table`.`slug` from `highlight_table` 

這將讓MySQL只從返回slug列。

然後,您應該只獲得1行,這是藍色的,因爲藍色在所有三個表中都存在。更改爲LEFT JOIN兩個文章和用戶表會讓你2個結果反饋(綠色和藍色)作爲INNER JOIN基本上可以作爲一個與和LEFT JOIN作品更像一個或

更新!

根據最終這裏很多信息是查詢不工作:

SELECT highlight.slug from highlight 
    LEFT JOIN article ON highlight.slug = article.slug 
    LEFT JOIN user ON highlight.slug = user.slug 
WHERE 
    article.slug IS NOT NULL OR user.slug IS NOT NULL 

這樣做的另一個例子:

SELECT `highlight`.`slug` from `highlight` 
WHERE `highlight`.`slug` IN (SELECT `user`.`slug` FROM `user` UNION SELECT `article`.`slug` FROM `article`) 

OR

SELECT `highlight`.`slug` from `highlight` 
INNER JOIN (SELECT `user`.`slug` FROM `user` UNION SELECT `article`.`slug` FROM `article`) AS `allslugs` ON `highlight`.`slug` = `allslugs`.`slug` 

另一個更新,我稱之爲「有趣的連接」

SELECT `highlight`.`slug` from `highlight` 
    RIGHT JOIN `user` ON `highlight`.`slug` = `user`.`slug` 
    LEFT JOIN `article` ON `highlight`.`slug` = `article`.`slug` 
WHERE 
    `highlight`.`slug` IS NOT NULL 
+0

Ive更新了雄心勃勃的選擇。我也改變了左加入,但這似乎並沒有工作,現在我從我的高亮表中獲取所有行,即使他們不在我的其他2個表中。 – panthro

+0

聽起來像你有其他問題,你沒有分享。看到[SQLFiddle](http://sqlfiddle.com/#!9/5fa815/3)它只返回我們預計的綠色和藍色。 –

+0

@Rahul也處於正確的軌道上,所以如果我們的建議都沒有工作,那麼您需要向我們提供有關您的數據的更多信息,因爲它聽起來不像您所描述的那樣。 –

0

試着改變你的查詢中選擇列表

SELECT h.`slug` from HighlightTable h 
INNER JOIN ArticleTable a ON h.`slug` = a.`slug` 
INNER JOIN UserTable u ON h.`slug` = u.`slug`; 

來限定列名不能重現該問題。見This Fiddle

根據您的最新評論,你需要一個LEFT JOIN查詢像

SELECT h.`slug` from HighlightTable h 
LEFT JOIN ArticleTable a ON h.`slug` = a.`slug` 
LEFT JOIN UserTable u ON h.`slug` = u.`slug`; 

然後做一個單獨的JOINUNION結果集

SELECT h.`slug` from HighlightTable h 
    INNER JOIN ArticleTable a ON h.`slug` = a.`slug` 
    UNION 
    SELECT h.`slug` from HighlightTable h 
    INNER JOIN UserTable u ON h.`slug` = u.`slug`; 
+0

恐怕這仍然沒有結果 – panthro

+0

@panthro,請參閱編輯答案,特別是小提琴鏈接 – Rahul

+0

小提琴確實重現問題。如果它出現在文章表或用戶表中,我希望高亮表中的所有內容。所以在你的小提琴中,我們也應該回到綠色。 – panthro