我一直在尝试为该4表联接获取正确的数据,但似乎无法确定。我试图根据我在songs中关注的人来从follows获取ID列表,并显示歌曲ID(如果我的关注者是曲目的creator或只是转发了它)。

SELECT DISTINCT songs.id
FROM songs
LEFT JOIN follows ON follows.follower = 6
LEFT JOIN tracks ON tracks.creator = follows.following
LEFT JOIN reshares ON reshares.resharer = follows.following
WHERE
songs.id = tracks.containing_song
OR
songs.id = reshares.song
ORDER BY songs.last_updated DESC LIMIT 1


我不太确定出了什么问题,但是关于数据库联接的知识非常有限。

最佳答案

您可能需要的是两个集合的并集:


跟随由id = 6的用户创建的歌曲
由id = 6的用户用户转发的歌曲如下


由于您尚未提供表架构,因此我使用的是您在查询中提供的名称。

( SELECT DISTINCT s.id, s.last_updated
  FROM follows f
  JOIN tracks t ON t.creator = f.following
  JOIN songs s ON t.containing_song = s.id
  WHERE f.follower = 6 )
UNION
( SELECT DISTINCT s.id, s.last_updated
  FROM follows f
  JOIN reshares r ON r.resharer = f.following
  JOIN songs s ON r.song = s.id
  WHERE f.follower = 6 )
ORDER BY last_updated DESC

关于mysql - MySQL 4表联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30992919/

10-11 02:46
查看更多