2013-01-22 91 views
1

說得到不同行,我們有兩個表:SQL查詢來從多個表

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; 

的具體情況是,很少有企業有分支機構(基本上是科表中的項目遠遠高於公司較少考慮到這種信息是上面的查詢最好的。 ?或者是否有其他選擇?

回答

2

更有效的方法可能是使用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) 
+0

我終於決定去與此給出具體的情況。 – amit

1

雖然我可能使用內部連接與交叉連接但是完全相同,也許使用子查詢可能會使其更快一些 - 不確定如果不嘗試:

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

不知道這是否會更快。

2

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

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