[英]mysql group by Select group select value for different rows of a column
[英]SQL select rows if a column value is not in a group of a different column's values
對於每個標識符 ,當收到的國家/地區不等於任何已交付的國家/地區時,如何返回數量 ? 因為我的桌子很大,所以我需要對下面的步驟進行有效的查詢。
這些是我認為可以做到的步驟,當然你不需要遵循它們:)
起始表:
identifier delivered received quantity
------------- ------------ ----------- ------------
1 USA France 432
1 France USA 450
1 Ireland Russia 100
2 Germany Germany 1,034
3 USA France 50
3 USA USA 120
結果:
identifier delivered received quantity
------------- ------------ ----------- ------------
1 Ireland Russia 100
起始表大約是30,000,000行,所以不幸的是,自連接是不可能的。 我正在使用類似於MySQL的東西。
我認為LEFT JOIN
查詢應該適合你:
SELECT a.*
FROM starting a
LEFT JOIN starting b
ON a.id = b.id
AND a.delivered = b.received
WHERE b.received IS NULL;
為了優化上述查詢,添加以下復合索引應該會為您提供更好的性能:
ALTER TABLE starting ADD KEY ix1(id, delivered, received);
您可以使用not exists
子查詢:
SELECT a.*
FROM starting a
WHERE NOT EXISTS
(
SELECT *
FROM starting b
WHERE a.id = b.id
AND a.delivered = b.received
)
這不是一個自連接,但查詢優化器可以自由地執行它(並且通常會這樣做)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.