簡體   English   中英

復雜的SQL組由選擇查詢組成

[英]Complexed SQL group by and having in select query

我有一個查詢,返回以下結果:

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的用戶標識如何仍然具有空行,因為它沒有“非空”結果。

我試過以下......

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)

不知道我還能嘗試什么。

原始查詢是巨大的,所以我希望你能夠使用我放在這里的這個非常簡化的版本......

編輯::

將HAVING子句設置為count(contact_id)> 0將獲取contact_id不為null的所有記錄,但現在我需要添加不在此結果集中的所有其他用戶。

這是一個主意...

 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 |
+---------+------------+-------------+

請嘗試下面的查詢。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM