集成两个SQL查询

时间:2017-01-25 19:25:51

标签: sql merge

我有这两个问题:

SELECT DISTINCT a, b, c, d, FROM x WHERE b IN (1, 2)

SELECT DISTINCT c, d, FROM y

我现在想要合并这些查询,以便在第一个查询中启动的语句仅包括c,d组合在第二个查询产生的输出中的行。有关如何做到这一点的任何想法?我的桌子很大,所以效率很重要。

2 个答案:

答案 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)

关于效率,您的索引将决定其执行情况。