【问题标题】:Integrate two sql queries整合两个sql查询
【发布时间】:2017-01-25 19:25:50
【问题描述】:

我有这两个疑问:

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

SELECT DISTINCT c, d, FROM y

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

【问题讨论】:

  • xy 是否包含相同的行?
  • 我删除了不兼容的数据库标签。您应该使用您真正使用的数据库标记问题。

标签: sql merge


【解决方案1】:

使用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 与复合值一起使用。

【讨论】:

    【解决方案2】:
    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)
    

    关于效率,您的索引将决定它的性能。

    【讨论】:

    • 如果考虑效率,那么这是一个糟糕的解决方案。第二个查询中的select distinct 表明y 中有多个具有相同值的行。这会生成一个更大的中间集,然后必须使用 select distinct 减少它。
    • @GordonLinoff 这是一个很好的观点。由于问题的简单性,我想更基本一些
    猜你喜欢
    • 2016-09-28
    • 2016-05-26
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多