对于所有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的名称是无效的,我需要在某个地方指定一个列名。但是在哪里呢?
发布于 2019-06-28 17:49:06
您应该使用:
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) 发布于 2019-06-28 17:51:18
还有另外两个选项:
加入:
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)https://stackoverflow.com/questions/56804642
复制相似问题