0

MySQL の 2 つのテーブルからリストを取得しようとしています。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' には 2 つの album_link がありますが、アーティストにはもう 1 つのアルバムがあるため、それも表示されていることに注意してください。アルバム「非表示」はユーザーの albums_link にないため、リストには表示されません。

テーブル: artist_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    

表: 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
4

2 に答える 2

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)
于 2013-03-20T16:34:09.737 に答える
0

You could try the following code:

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;

Hope it helps!

于 2013-03-20T12:35:20.093 に答える