我有兩個表,需要計算表 A 中在表 B 中有兩個特定匹配項的所有條目的計數。表 B 將表 A 的 Id 作為外鍵。
Table a
ID Name
1 Foo
2 Bar
3 John
4 Jane
Table b
aID Value
1 12
1 12
2 8
3 8
3 12
4 12
4 8
我現在需要計算表 A 中所有在表 B 中同時具有值?? 8 和 12 的名稱至少一次。
SELECT COUNT(*) FROM a join b on a.id = b.aId where b.value = 8 and b.value = 12
給我 0 個結果。正確的結果應該是 2(John 和 Jane)。
編輯:顯然,@Larnu 是正確的,8 永遠不會是 12。
另外,我應該澄清一下,對于任何表 A id,表 B 中都可以有兩個或多個單個值,但其他都沒有(例如 8 次,但沒有 12 次)。我更新了表格以反映這一點。
uj5u.com熱心網友回復:
您可以使用EXISTS和HAVING:
SELECT COUNT(*) FROM a
WHERE EXISTS(SELECT b.aID FROM b
WHERE a.ID = b.aID
GROUP BY b.aID
HAVING COUNT(*) = 2)
如果您想特別value = 8 or 12添加AND b.value IN(8,12)到內部查詢
uj5u.com熱心網友回復:
獲取每行出現 8 和 12 的次數的子查詢可以解決問題:
select count(id) from
(select id, sum(case when b.Value = 8 then 1 else 0 end) as ct8,
sum(case when b.Value = 12 then 1 else 0 end) as ct12
from a inner join b on a.id = b.aID
group by a.id) as t
where ct8 >= 1 and ct12 >=1
小提琴
uj5u.com熱心網友回復:
加入不是這里的答案。您需要一個包含相關子查詢的 WHERE 子句,該子查詢使用 COUNT() 或 EXISTS() 檢查您的條件。應該執行以下操作之一。
SELECT COUNT(*) FROM A
WHERE (SELECT COUNT(*) ?FROM B ?WHERE B.aID = A.ID ?AND B.VALUE IN (8, 12)) = 2
SELECT COUNT(*) FROM A
WHERE EXISTS(SELECT * FROM B WHERE B.aID = A.ID AND B.VALUE = 8)
AND EXISTS(SELECT * FROM B WHERE B.aID = A.ID AND B.VALUE = 12)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/408475.html
標籤:
