如何查看一个值是否存在于多个表中,并排除没有任何值的表



我正在尝试编写一个存储过程的一部分,其中有4个表(在本例中,我将称它们为@a、@B、@C和@D——每个表只有一个名为id的列,类型为int)。我想提取表上的值相互匹配的情况,但前提是表上有项目。这些表与我的应用程序中的数据过滤器有关,因此,如果表上没有值,则不会应用该过滤器。存储过程的这一部分将告诉我应用过滤器的所有表上都存在哪些值,以便显示过滤器选项组合中的正确数据。如果表中的count(id)大于0,我会使用嵌套的if语句来执行此操作,但组合太多,过程运行速度非常慢,滞后于我的应用程序。

因此,作为一个更好的例子,假设表@a、@C和@D中有值,但表@B没有。我需要找到一种方法来获取所有3个表上存在的所有值。如果只有2个表有项目,或者1个,或者全部4个,我也需要这样做。同样,嵌套的if方法太慢,并且滞后于应用程序。有人对这个问题有更好的想法/方法吗?提前谢谢。

这不会很快,但我认为这正是您想要的。

SELECT
  *
FROM
  @a        AS a
FULL OUTER JOIN
  @b        AS b
    ON b.id = a.id
FULL OUTER JOIN
  @c        AS c
    ON c.id = COALESCE(b.id, a.id)
FULL OUTER JOIN
  @d        AS d
    ON d.id = COALESCE(c.id, b.id, a.id)
WHERE
    (a.id IS NOT NULL OR (SELECT COUNT(*) FROM @a) = 0)
AND (b.id IS NOT NULL OR (SELECT COUNT(*) FROM @b) = 0)
AND (c.id IS NOT NULL OR (SELECT COUNT(*) FROM @c) = 0)
AND (d.id IS NOT NULL OR (SELECT COUNT(*) FROM @d) = 0)

最新更新