匹配“ IN” CTE

时间:2019-06-28 09:48:05

标签: sql oracle

对于您在那里的所有SQL专家来说,这可能都是一个非常简单的操作。

我正在尝试使用CTE,如下所示:

WITH MyCTE AS
    (
    SELECT TABLE_A.VALUE
    FROM TABLE_A
    WHERE TABLE_A.DELETED IS NULL
    )
SELECT
    TABLE_B.ID
FROM
    TABLE_B,
    MyCTE
WHERE
    TABLE_B.VALUE IN MyCTE -- This doesn't work

您可以看到我正在尝试做的事情。基本上,而不是列出值IN ('a','b','c')等,我只想使用CTE的输出来定义列表。

我猜想仅使用CTE的名称是无效的,因此我需要在某处指定列名称。但是在哪里?

2 个答案:

答案 0 :(得分:2)

您应该使用:

WITH MyCTE AS
    (
    SELECT TABLE_A.VALUE
    FROM TABLE_A
    WHERE TABLE_A.DELETED IS NULL
    )
SELECT TABLE_B.ID
FROM TABLE_B
WHERE TABLE_B.VALUE IN (SELECT Value FROM MyCTE) 

答案 1 :(得分:1)

还有两个选择:

加入:

WITH mycte
     AS (SELECT a.VALUE
           FROM table_a a
          WHERE a.deleted IS NULL)
SELECT DISTINCT b.id
  FROM table_b b JOIN mycte m ON m.VALUE = b.VALUE;

完全跳过CTE:

SELECT b.id
  FROM table_b b
 WHERE b.VALUE IN (SELECT a.VALUE                 --> this is CTE
                     FROM table_a a
                    WHERE a.deleted IS NULL)