我有2张桌子

users

id,  name,    added_date
 1, 'name1', '2016-08-23 21:01:59'
 2, 'name2', '2016-08-23 21:01:59'
 3, 'name3', '2016-08-23 21:01:59'
 4, 'name4', '2016-08-23 21:01:59'

comments

day_added, comment,    user_id
'Mon'    , 'comment1',       3
'Tue'    , 'comment2',       3
'N/A'    , 'comment3',       3
'N/A'    , 'comment4',       4


以下是我正在使用的查询。

SELECT id
     , name
     , DATE_FORMAT(users.added_date,'%a') today
     , added_date
     , day_added
     , comment
     , user_id
  FROM users
  LEFT
  JOIN comments
    ON users.id = comments.user_id
   AND (
       DATE_FORMAT(users.added_date,'%a') = comments.day_added
       OR
       comments.day_added = 'N/A'
       )


结果如下

id, name,     today,  added_date,           day_added, comment   , user_id
 1, 'name1', 'Tue' , '2016-08-23 21:01:59', NULL     , NULL      , NULL
 2, 'name2', 'Tue' , '2016-08-23 21:01:59', NULL     , NULL      , NULL
 3, 'name3', 'Tue' , '2016-08-23 21:01:59', 'Tue'    , 'comment2', 3
 3, 'name3', 'Tue' , '2016-08-23 21:01:59', 'N/A'    , 'comment3', 3
 4, 'name4', 'Tue' , '2016-08-23 21:01:59', 'N/A'    , 'comment4', 4


我希望我的结果像

id, name,     today,  added_date,           day_added, comment   , user_id
 1, 'name1', 'Tue' , '2016-08-23 21:01:59', NULL     , NULL      , NULL
 2, 'name2', 'Tue' , '2016-08-23 21:01:59', NULL     , NULL      , NULL
 3, 'name3', 'Tue' , '2016-08-23 21:01:59', 'Tue'    , 'comment2', 3
 4, 'name4', 'Tue' , '2016-08-23 21:01:59', 'N/A'    , 'comment4', 4


问题是user_id 3有2行,其中有day_add Tue和'N / A':

我只需要1行用于user_id 3

如果day_add与add_date匹配,则仅包含该数据,不包含“ N / A”数据

SQL小提琴在这里

http://sqlfiddle.com/#!9/ea5e39/2/0

帮助将不胜感激

提前致谢

最佳答案

这是一种方法。您没有指定要保留的行,因此我假设非N / A优先。

SELECT
    ...
    coalesce(c1.comments, c2.comments) as comments,
    ...
FROM
    users
    LEFT JOIN comments c1
        ON     c1.user_id = users.id
           AND DATE_FORMAT(users.added_date,'%a') = c1.day_added
    LEFT JOIN comments c2
        ON     c2.user_id = users.id
           AND c2.day_added = 'N/A'

09-26 22:46
查看更多