2016-09-27 85 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