我有以下表 t
| 鑰匙 | 價值 |
|---|---|
| 1 | 一種 |
| 1 | b |
| 1 | C |
| 2 | 一種 |
| 2 | C |
在上表中,Key 1 具有三個值,即 a、b 和 c。然而,密鑰 2 只有兩個值,即 a 和 c。
如何撰寫一個回傳沒有值'b'的鍵的SQL?在上面的例子中,SQL 必須回傳 Key 2
uj5u.com熱心網友回復:
您可以這樣做,方法是為每個鍵的 b 值創建一個計數器,然后只選擇具有 0 b 值的鍵:
SELECT
key
FROM (SELECT
t.key,
SUM(CASE WHEN t.value = 'b' THEN 1 ELSE 0 END) AS number_of_b_values
FROM t
GROUP BY t.key)
WHERE number_of_b_values = 0
uj5u.com熱心網友回復:
嘗試這個
with b_keys as
(
select distinct key
from t
where value = 'b'
)
select distinct key
from t
left join b_keys
on t.key = b_keys.key
where b_keys.key is null
uj5u.com熱心網友回復:
你真的在尋找“b”嗎?
或者您是否真的需要找到丟失的任何鍵 - 即 - 它可能不是“b”而是“a”或“c”丟失?
如果您構建所有預期值的串列,則可以將其與not exists一起使用來識別所有缺失的鍵:
with v as (
select distinct t.[key], dv.[value]
from (select distinct [value] from t) dv
cross join t
)
select [key]
from v
where not exists (select * from t where t.[value] = v.[value] and t.[key] = v.[key]);
看演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449514.html
