簡體   English   中英

從 SQL 中的多個表中獲取 select 數據的最有效方法是什么?

[英]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:

  • A -> B 帶ID
  • B -> C 帶尺寸
  • C -> D 帶代碼

目前,我通過編寫多個連接實現了我想要的。

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

有沒有更有效的方法和/或我的解決方案是否正確?

這回答了問題的原始版本。

您似乎不需要表AD

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM