[英]Why “SELECT … WHERE id=1=0” returns all rows except one with id=1?
[英]SELECT all rows where sum of count for this id is not 0
我正在從Excel查詢Access數據庫。 我有一張與此表類似的表:
id Product Count
1 A 0
1 B 5
3 C 0
2 A 0
2 B 0
2 C 5
3 A 6
3 B 5
3 C 7
我要從中返回所有行(包括該產品的計數為0的行),其中該ID的計數總和不為0,並且乘積為A或B。因此,從上表中可以我會得到:
id Product Count
1 A 0
1 B 5
3 A 6
3 B 5
下面的查詢給出正確的輸出,但是速度很慢(從稍微小的7k行db中查詢時花了將近一分鍾),所以我想知道是否有一種更有效的方法。
SELECT *
FROM [BD$] BD
WHERE (BD.Product='A' or BD.Product='B')
AND BD.ID IN (
SELECT BD.ID
FROM [BD$] BD
WHERE (Product='A' or Product='B')
GROUP BY BD.ID
HAVING SUM(BD.Count)<>0)
在子查詢中使用GROUP BY
方法,然后使用INNER JOIN
返回[BD$]
表。
SELECT BD2.*
FROM
(
SELECT BD1.ID
FROM [BD$] AS BD1
WHERE BD1.Product IN ('A','B')
GROUP BY BD1.ID
HAVING SUM(BD1.Count) > 0
) AS sub
INNER JOIN [BD$] AS BD2
ON sub.ID = BD2.ID;
IN()語句可能會執行很多次,您可以嘗試EXISTS():
SELECT * FROM [BD$] BD
WHERE BD.Product in('A','B')
AND EXISTS(SELECT 1 FROM [BD$] BD2
WHERE BD.id = BD2.id
AND BD2.Product in('A','B')
AND BD2.Count > 0)
如果要查找ID計數總和為非零的記錄,則至少一個非唯一ID的計數必須為非零。
SELECT *
FROM [BD$] BD
WHERE BD.Product IN ('A', 'B')
AND BD.ID IN (
SELECT DISTINCT b.ID
FROM [BD$] b
WHERE b.Product IN ('A', 'B')
AND b.Count<>0
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.