簡體   English   中英

SQL查詢以從多個表中獲取不同的行

[英]SQL query to get distinct rows from multiple tables

假設我們有兩個表:

Company
+---+-----+
|id | name|
+---+-----+
|1  | bar |
|2  | foo |
+---+-----+

Branch
+----+----+-------+
|cid | id | profit|
+----+----+-------+
|1   | 10 | 100   |
|1   | 11 | 200   |
|2   | 20 | 50    |
+----+----+-------+

--cid in Branch is the foreign key to company id

查詢的目的是找出擁有​​至少一個分支機構且利潤大於100的公司。

一種方法是:

SELECT DISTINCT c.id, c.name 
  FROM Company c, Branch b
  WHERE c.id == b.cid AND b.profit > 100;

特殊的情況是,很少有公司有分支機構(基本上,“分支機構”表中的條目比“公司”中的條目少。鑒於此信息,上述查詢是最好的選擇嗎?還是有其他選擇嗎?

您的查詢看起來不錯,我建議使用ANSI JOIN語法:

SELECT DISTINCT c.id, c.name 
FROM Company c
INNER JOIN Branch b
  ON c.id = b.cid 
WHERE b.profit > 100;

一種更有效的方法可能是使用EXISTS子句:

SELECT c.id, c.name 
FROM Company c
WHERE EXISTS
(SELECT 1
 FROM Branch b
 WHERE c.id = b.cid AND b.profit > 100)

您的查詢對我來說似乎正確,盡管我可能使用內部聯接與交叉聯接,但完全相同。 也許使用子查詢可能會使它更快一些-如果不嘗試就不確定:

SELECT DISTINCT c.id, c.name 
  FROM Company c JOIN (
    SELECT CID FROM Branch WHERE Profit > 100) t ON c.id = t.id

不確定是否會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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