对于您在那里的所有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的名称是无效的,因此我需要在某处指定列名称。但是在哪里?
答案 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)