我有一个返回以下结果的查询:
user_id contact_id contact_id2
--------------------------------------
1 45 3
1 null null
2 433 65
2 433 6789
2 433 5543
3 443 467
3 null null
4 null null
5 5564 12
5 null null
我想调整查询以删除contact_id和contact_id2为null的所有行,但前提是该用户id的行不为null。
所以结果看起来像......
user_id contact_id contact_id2
--------------------------------------
1 45 3
2 433 65
2 433 6789
2 433 5543
3 443 467
4 null null
5 5564 12
查看4的用户ID如何仍然具有空行,因为它没有'not null'结果。
我试过以下......
SELECT user_id, contact_id, contact_id2 FROM user_table
LEFT JOIN contact_table ON .......
LEFT JOIN contact2_table ON ........
GROUP BY user_id, contact_id, contact_id2
HAVING count(contact_id) > 0 OR (count(contact_id) = 0 AND count(user_id) > 1)
不知道我还能尝试什么。
原始查询很大,所以我希望你能够使用我放在这里的这个非常简化的版本......
EDIT ::
将HAVING子句设置为count(contact_id)> 0获取contact_id不为null的所有记录,但现在我需要添加不在此结果集中的所有其他用户。
答案 0 :(得分:0)
这是一个想法...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,user_id INT NOT NULL
,contact_id INT NULL
,contact_id2 INT NULL
);
INSERT INTO my_table (user_id,contact_id,contact_id2) VALUES
(1 ,45 ,3),
(1 ,null ,null),
(2 ,433 ,65),
(2 ,433 ,6789),
(2 ,433 ,5543),
(3 ,443 ,467),
(3 ,null ,null),
(4 ,null ,null),
(5 ,5564 ,12),
(5 ,null ,null);
SELECT DISTINCT x.user_id
, y.contact_id
, y.contact_id2
FROM my_table x
LEFT
JOIN my_table y
ON y.user_id = x.user_id
AND y.contact_id IS NOT NULL;
+---------+------------+-------------+
| user_id | contact_id | contact_id2 |
+---------+------------+-------------+
| 1 | 45 | 3 |
| 2 | 433 | 65 |
| 2 | 433 | 6789 |
| 2 | 433 | 5543 |
| 3 | 443 | 467 |
| 4 | NULL | NULL |
| 5 | 5564 | 12 |
+---------+------------+-------------+
答案 1 :(得分:0)
请尝试以下查询。
select user_id,contact_id,contact_id2 from table where user_id in ( select distinct user_id from table group by user_id having count(user_id)>1) and contact_id is not null;