Случай, когда столбец a из таблицы X присутствует в столбце b таблицы Y - PullRequest
0 голосов
/ 08 марта 2020

Ниже приведен мой вариант использования, я запрашиваю таблицы красного смещения, использую case когда, но получаю ошибку в случае, когда утверждение. ОШИБКА: утверждение 2 недействительно. ОШИБКА: синтаксическая ошибка в или около "b"

МОЙ SQL запрос:

CREATE TEMP TABLE TABLE1 AS
(SELECT
COL1
,COL2
,COL3
FROM XYZ_TABLE
WHERE CONDITION1
AND CONDITION2);

CREATE TEMP TABLE TABLE2 AS
(SELECT DISTINCT
COL1
FROM ABC_TABLE
WHERE CONDITION1
AND CONDITION2);


SELECT
COL1
,COL2
,COL3
,CASE WHEN (a.COL1 IN b.COL1) THEN 1 ELSE 0 END AS IN_TABLE_B
FROM TABLE1 a
LEFT JOIN TABLE2 b
WHERE a.COL1 = b.COL1

Чего я хочу достичь:

TABLE1
-----------------
ID   |  NAME   | COL1
-----------------------
123  |   A    | BLA
234  |   B    | BLAA
345  |   C    | BLAH
456  |   X    | XXX
567  |   N    | FLS


TABLE2
-----------------
ID   |  COL1   | COL2
-----------------------
123  |   SKLJF    | BLA
345  |   DKLUF    | BLAH
567  |   KKBDL    | FLS

Желаемый выход (IS ИДЕНТИФИКАЦИЯ В ТАБЛИЦЕ 1 ПРЕДСТАВЛЯЕТСЯ В ТАБЛИЦЕ 2, ЕСЛИ ДА, ТО 1, ИЛИ 0, КОНЕЦ КАК COLUMN_NAME)

----------------------------------------------
ID   |  IN TABLE B   |
----------------------------------------------
123  |   1    | 
234  |   0    | 
345  |   1    | 
456  |   0    | 
567  |   1    | 

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Я мог бы использовать существующие логи c здесь:

SELECT
    t1.ID,
    CASE WHEN EXISTS (SELECT 1 FROM TABLE2 t2 WHERE t1.COL1 = t2.COL1)
         THEN 1 ELSE 0 END AS IN_TABLE_B
FROM TABLE1 t1
ORDER BY t1.ID;

Этот подход устойчив к записи из первой таблицы, имеющей несколько совпадений.

1 голос
/ 08 марта 2020

Вы не будете использовать «IN» для этого, даже если ваше желание упоминает слово «in»

Вы выполняете левое соединение, которое будет иметь значение для b.ID, если соединение успешно и ноль, где это не удалось, следовательно:

SELECT
a.ID
,CASE WHEN b.ID IS NULL THEN 0 ELSE 1 END AS IN_TABLE_B
FROM TABLE1 a
LEFT JOIN TABLE2 b
WHERE a.ID = b.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...