我有两个表:tracklist(trackid artist event date)radded(trackid, user),与n的关系为1(trackid是每个表上的键)。

我想通过添加一个名为exist的新字段来返回整个跟踪列表表,如果在重排的表上存在用户(已通过查询)在每一行的相关trackid时,该字段应该为1或0。

范例:

追踪清单

*trackid artist event date*
123      art1   eve1  date1
321      art2   eve2  date2
456      art3   eve3  date3
298      art4   eve4  date4
565      art5   eve5  date5


added

trackid user
123     luigi
123     mario
321     luigi
298     mario
298     antonio


如果我使用luigi作为用户,则输出必须为:

123 art1 eve1 date1 1
321 art2 eve2 date2 1
456 art3 eve3 date3 0
298 art4 eve4 date4 0
565 art5 eve5 date5 0


我该如何查询?

最佳答案

LEFT OUTER JOINtracklist使用radded where user="luigi"。这将从tracklist的每一行中准确获得一次,如果username存在,将放置NULL;如果找不到合适的用户名,则放置1

然后将用户名转换为NULL,或将0转换为exist,并将列重命名为。

SELECT t.trackid, t.artist, t.event, t.date, IF(r.user IS NULL, 0, 1) AS exist
FROM tracklist t
LEFT OUTER JOIN (SELECT * from radded where user = "luigi") r
ON t.trackid = r.trackid

关于mysql - MySQL-加入麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5133506/

10-12 14:38