2016-08-23 76 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

太棒了!,解決了我的問題,乾淨利落。非常感謝 !。 –