Соответствие "IN" CTE - PullRequest
1 голос
/ 28 июня 2019

Вероятно, это действительно просто для всех вас, экспертов по 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 ]

2 голосов
/ 28 июня 2019

Вы должны использовать:

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 голос
/ 28 июня 2019

Еще два варианта:

Регистрация:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...