大家好,目前有一個表,10萬條資料,想查詢出符合條件的,但因為資料了太大,沒辦法核實是否準確,但我用按照我的條件,新建了一張表,資料內容基本原表,但按照之前的查詢陳述句出來的結果是錯誤的!

上面是表內容,當然我原表中有一個身份證號欄位這里面可以在加一個身份證欄位
我要的結果是這樣的
查找重復的記錄,但是“張三不符合”,只要在KT欄位中出現“開通“不管幾條記錄就算成功!
我要的結果是把李四、王五 KT都是"N“的沒出現過“開通”查找出來!當然也會存在單條是“N”的也需要查詢出來!
SELECT * FROM peo WHERE (id,people_no,people_name) IN (SELECT id,people_no,people_name FROM peo where kt="\\N" GROUP BY people_no,people_name HAVING COUNT(*) >=1);
謝謝各位!
uj5u.com熱心網友回復:
你要的是這種效果嗎

我的sql是這樣寫的
select * from
(select a.*,b.id sid
from peo a
left join (select * from peo where peo.kt='開通') b on a.people_no=b.people_no and a.people_name=b.people_name)
a GROUP BY a.people_no,a.people_name having a.sid is null
uj5u.com熱心網友回復:
沒錯,太感謝了
!
uj5u.com熱心網友回復:
怎么多加一個一列sid? 請問你的思路是?
uj5u.com熱心網友回復:
使用left join,左側表a資料沒有關聯到右側表b的資料,也會顯示,但是b表的資料b.id用null填充,這個id取了別名sid,這個名字用作后面判斷。
邏輯上沒問題,技巧也不錯,就是沒明白為啥搞這么復雜。
uj5u.com熱心網友回復:
好像覺得有點不對,結果應該將張三(有開通)的記錄都篩出去。那么應該用name做條件,不應該有id,id+name應該只關聯到“開通”那條記錄,張三其他null的記錄關聯不到,跟其他的混在一起了。uj5u.com熱心網友回復:
這個樓上說的是對的 你可以選運行一下這個代碼
select * from
(select a.*,b.id sid
from peo a
left join (select * from peo where peo.kt='開通') b on a.people_no=b.people_no and a.people_name=b.people_name)
a GROUP BY a.people_no,a.people_name having a.sid is null
首先拿到全表的資料 然后根據用戶編號和名稱去關聯已開通的用戶,滿足關聯條件的這個時候sid都會有值,這個sid欄位只是做一個標識,這個有值說明根據用戶編號和名稱能查到對應的開通記錄, 然后把這個資料作為一個結果 依據用戶名稱和編號分組 當sid沒有值,就說明這個用戶沒有開通

uj5u.com熱心網友回復:
上面圖貼錯了 你先運行那個子查詢 看到結果是下面的這樣uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19878.html
標籤:MySQL
下一篇:分類統計,并包含統計數為0的行
