我有这两个问题:
SELECT DISTINCT a, b, c, d, FROM x WHERE b IN (1, 2)
SELECT DISTINCT c, d, FROM y
我现在想要合并这些查询,以便在第一个查询中启动的语句仅包括c,d组合在第二个查询产生的输出中的行。有关如何做到这一点的任何想法?我的桌子很大,所以效率很重要。
答案 0 :(得分:3)
使用exists
?
SELECT DISTINCT a, b, c, d
FROM x
WHERE b IN (1, 2) AND
EXISTS (SELECT 1 FROM y WHERE x.c = y.c and x.d = y.d);
使用exists
时,只有在select distinct
具有重复值时才需要x
。否则没有必要。
而且,为了提高性能,您需要y(c, d)
上的索引。此外,x(b, a, c, d)
上的索引在大多数数据库中也会有所帮助。
注意:子查询中不需要distinct
。在某些数据库中,您也可以将in
与复合值一起使用。
答案 1 :(得分:1)
SELECT DISTINCT x.a,x.b,x.c,x.d
FROM x
INNER JOIN y ON x.c = y.c
AND x.d = y.d
WHERE b in (1,2)
关于效率,您的索引将决定其执行情况。