2016-08-23 74 views
0

不需要行我有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,它有两行与day_added星期二和 'N/A':

我只想要1行user_id 3

如果与ADDED_DATE day_added比赛则仅包括数据,不包括与 'N/A'

SQL小提琴是这里

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

帮助将高度赞赏

由于数据Advance

回答

1

这是一种方法。你没有指定哪一行想要保留,所以我假设非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' 
+0

太棒了!,解决了我的问题,干净利落。非常感谢 !。 –