获取链表有值的表中的所有行

时间:2013-03-20 12:28:39

标签: sql

我正在尝试从MySQL中的两个表中获取列表。通过查看artist_albums_link - > artist_uid并匹配到artists_albums。该列表应包含相同的专辑,但同时包含用户没有的艺术家的所有专辑。

user_uid ='5'

的结果
album_uid       artist_uid                      title       user_uid
album:another   artist:00N1TiCLsiP8IE24hw0rl9   yahoo       5
album:test      artist:00N1TiCLsiP8IE24hw0rl9   Test        5
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9   add this    null

这是下面的数据表。 请注意用户'5'如何有两个album_links,但因为艺术家还有另一张专辑,所以也会显示。专辑“not show”不在用户albums_link中,因此它不在列表中。

table:artists_albums

album_uid       artist_uid                      title
album:another   artist:00N1TiCLsiP8IE24hw0rl9   yahoo   
album:noshow    artist:00sazWvoTLOqg5MFwC68Um   not show    
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9⇥  add this    
album:test      artist:00N1TiCLsiP8IE24hw0rl9   Test    

table:artist_albums_link

uid user_uid    artist_uid                      album_uid   
1   5           artist:00N1TiCLsiP8IE24hw0rl9   album:test  
2   6           artist:00N1TiCLsiP8IE24hw0rl9   album:test  
3   5           artist:00N1TiCLsiP8IE24hw0rl9   album:another   

尝试使用join来获取null值但没有成功。新值a.updated(timestamp)对于行是正确的,但是专辑“album:notinlist”的值b.found(timestamp)是错误的,这篇文章在artist_albums_link中不存在。

SELECT  a.album_uid, a.artist_uid, a.title, a.updated, b.user_uid,  b.found
FROM  artist_albums a LEFT OUTER JOIN artist_albums_link b ON a.artist_uid = b.artist_uid
WHERE b.user_uid = '5'

结果:

album_uid       artist_uid                      title       updated                 user_uid    found
album:another   artist:00N1TiCLsiP8IE24hw0rl9   yahoo       2013-03-20 11:29:08     5           2013-03-18 11:24:47
album:another   artist:00N1TiCLsiP8IE24hw0rl9   yahoo       2013-03-20 11:29:08     5           2013-03-19 11:29:59
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9   add this    2013-03-15 11:41:20     5           2013-03-18 11:24:47
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9   add this    2013-03-15 11:41:20     5           2013-03-19 11:29:59
album:test      artist:00N1TiCLsiP8IE24hw0rl9   Test        2013-03-20 11:23:41     5           2013-03-18 11:24:47
album:test      artist:00N1TiCLsiP8IE24hw0rl9   Test        2013-03-20 11:23:41     5           2013-03-19 11:29:59

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

SELECT a.album_uid, a.artist_uid, a.title, b.user_uid
FROM  artists_albums a, artist_albums_link b
WHERE a.artist_uid = b.artist_uid  AND b.user_uid = 5;

希望它有所帮助!

答案 1 :(得分:0)

终于找到了有用的东西。

SELECT a.album_uid, a.artist_uid, a.title, a.updated, b.user_uid, b.found
FROM artist_albums AS a
LEFT OUTER JOIN artist_albums_link AS b ON a.album_uid = b.album_uid
WHERE EXISTS (SELECT artist_uid FROM artist_albums_link WHERE artist_uid = a.artist_uid ) AND (b.user_uid = '5' OR b.user_uid is null)
相关问题