我有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'