我在嘗試從結構不良的一對多表中回傳一些資料時遇到了困難。
我得到了一個資料匯出,其中從“部分代碼”開始(在 cat_fullxPath 中)的所有內容都與我的客戶資料庫中的“技能 ID”相關。
結果以前在一行上回傳,但我使用了拆分函式來分解這些結果(來自 cat_fullXPath 列)。您可以在最右側的列中從我的客戶資料庫中看到相關的“技能 ID”:

從這里開始,有數以千計的記錄可能混合了這些技能 ID(還有許多其他記錄,我剛剛提供了這個示例)。我希望能夠找到與所有 4 個(或來自另一個示例的多個匹配)skillID 匹配的記錄,并且僅找到那些。
例如(我剛好知道這個 ID 給了我想要的結果):
SELECT
id
skillID
FROM table1
WHERE skillID IN ( 1004464, 1006543, 1004605, 1006740 )
AND id = 69580;
這讓我回傳:

請注意,這些是該表中唯一的列。
所以這是我想要回傳的 ID。
這些是我不想回傳的結果,因為缺少其中一個技能 ID:

我已經創建了一個臨時表,其中包含每個 ID 的所有技能的計數,但我不確定此時我是否走上了正確的道路

我很確定有一個簡單的解決方案,但是我的頭撞到了墻上。希望有人能幫忙!
uj5u.com熱心網友回復:
我們知道您正好需要 4 項技能,因此只需創建一個子查詢:
select id from
(
SELECT
id
count(skillID) countSkill
FROM table1
WHERE skillID IN ( 1004464, 1006543, 1004605, 1006740 )
group by id;
)
where countSkill = 4;
可以使用sum, 而不是count。但是,而不是被過濾4,篩選由4022352,這是所有的總和skillID。
您還可以洗掉子查詢并使用HAVING. 但是您將獲得更差的性能。
SELECT
id
count(skillID) countSkill
FROM table1
WHERE skillID IN ( 1004464, 1006543, 1004605, 1006740 )
group by id
having count(skillID) = 4;
uj5u.com熱心網友回復:
您還沒有告訴我們您的 DBMS。這是一個標準的 SQL 方法:
select id
from table1
group by id
having count(case when skillid = 1004464 then 1 end) > 0
and count(case when skillid = 1006543 then 1 end) > 0
and count(case when skillid = 1004605 then 1 end) > 0
and count(case when skillid = 1006740 then 1 end) > 0
and count(case when skillid not in (1004464, 1006543, 1004605, 1006740) then 1 end) = 0;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325111.html
標籤:sql
