困惑于一个有点复杂的LEFT / RIGHT JOIN查询

时间:2011-06-24 00:16:14

标签: mysql sql database

感谢您花时间阅读本文。

基本上我有3张桌子。帖子,关注者,艺术家。我想要做的就是从“艺术家”中拉出用户“关注”的所有“帖子”。我正在传递user_id,并尝试从“帖子”和“艺术家”中提取数据

Posts /* the posts table */
id
body
artist_id
timecode

Follows /* the follows table */
id
artist_id
user_id

Artists /* the artists table */
id
name

所以,我的基本查询就是这样开始的:

SELECT Posts.id,Posts.body,Posts.timecode,Artists.id AS artist_id,Artists.name
FROM Posts,Artists
LEFT JOIN Artists
ON Posts.artist_id = Artists.id

现在这是我开始感到困惑的地方。我猜我在“Follows”表上需要另一个JOIN语句,以便将返回的结果限制为具有user_id和artist_id的“follow”条目的行。

即:

RIGHT JOIN Follows
ON Posts.artist_id = Follows.artist_id
WHERE Follows.user_id = :userid

我的问题是我甚至不确定如何正确地写这个,虽然我觉得我在这里正确的轨道... sorta

非常感谢任何帮助!感谢。

编辑请注意我从Posts和Artists表中提取数据,而不仅仅是Posts表。不确定这是否会产生很大的不同。

2 个答案:

答案 0 :(得分:2)

我看不到你需要一个外连接,标准的SQL内连接应该返回你想要的集合。您必须信任SQL才能找到您感兴趣的所有行。

SELECT
  p.*
FROM
  posts p,
  artists a,
  follows f
WHERE
  f.user_id = :userid AND
  a.id = f.artist_id AND
  p.artist_id = a.id
;

答案 1 :(得分:1)

SELECT p.id,p.body,p.timecode,a.id AS artist_id,a.name
FROM Posts p
INNER JOIN Follows f ON p.artist_id = f.artist_id
INNER JOIN Artists a ON f.artist_id = a.id
WHERE f.user_id = X

没有检查语法我希望它没问题。