假设我们有两个表:
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;
特殊情况是很少有公司有分支机构(基本上分支表中的条目远远少于公司中的条目。鉴于此信息是上述查询最好的可能吗?还是有其他选择?
答案 0 :(得分: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;
答案 1 :(得分: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)
答案 2 :(得分:1)
你的查询看起来对我来说,虽然我可能会使用内连接和交叉连接,但相同。也许使用子查询可以使它更快一点 - 不确定而不尝试它:
SELECT DISTINCT c.id, c.name
FROM Company c JOIN (
SELECT CID FROM Branch WHERE Profit > 100) t ON c.id = t.id
不确定是否会更快。