[英]What is the most efficient way to select data from multiple tables in SQL?
為了檢索我想要顯示的數據,我需要訪問數據庫中的多個表。
例如表 A,B,C,D :
A B C D
Id|Date Id|Size|Price Size|Dep Code|Des
1|1.2.19 3| XL|10.00 L|AA AA|Altora
2|2.3.19 4| L|10.00 XL|CC BB|Barb
3|2.7.19 5| XXL|10.00 S|DD CC|Culic
4|3.9.19 6| XL|5.00 XXL|DD DD|Dold
5|4.9.19 4| S|12.00 XXL|DD EE|Elle
我想總結某些日期之間每個D.departement的 B.price:
目前,我通過編寫多個連接實現了我想要的。
select D.code, D.des, sum(B.price)
from A
join B on A.id = B.id
join C on B.size = C.size
join D on C.dep = D.code
where A.date between 1.1.19 and 6.1.19
group by D.dep, D.des
有沒有更有效的方法和/或我的解決方案是否正確?
這回答了問題的原始版本。
您似乎不需要表A
或D
:
select c.dep, sum(B.price)
from B join
C
on B.size = C.size
group by c.dep;
您可能確實需要這些表格。 它們可能需要用於過濾或增加行數。 但是,根據select
和示例數據,不需要它們。
除了錯誤的連接條件( C.dep = D.dep
應該是C.dep = D.code
),根據您提供的信息,您的解決方案看起來是正確的。 很難判斷效率,但它可能足夠有效。 我這么說是因為 Firebird 的優化器並不是那么好,所以有時更改查詢中的連接順序可能會提高查詢的性能,而在其他數據庫系統中,優化器會為您做到這一點。
此外,性能可能取決於您在 where 子句中加入或使用的字段上是否存在索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.