Redshift: FULL JOIN, исключая NULL для правой таблицы - PullRequest
1 голос
/ 05 августа 2020

У меня есть Table1 вот так:

ID |   Name   | Occupation
----------------------------
 1 | Garfield | Student

и еще Table 2 вот так:

ID |   Name   | Occupation
----------------------------
 1 | Garfield | Stud

Мой ожидаемый результат:

Table1.ID |   Table1.Name   | Table1.Occupation | Table2.ID |   Table2.Name   | Table2.Occupation
---------------------------------------------------------------------------------------------------
 1        | Garfield        | Student           | NULL      |      NULL       |  NULL
NULL      | NULL            | NULL              | 1         |   Garfield      |  Stud

Мой запрос:

SELECT *
FROM table1 t1
FULL JOIN table2 t2
ON t1.id = t2.id
AND t1.name = t2.name
AND (t1.occupation ILIKE ('%' || t2.occupation || '%') OR t2.occupation ILIKE ('%' || t1.occupation || '%'))
;

Но этот запрос дает мне следующий результат:

Table1.ID |   Table1.Name   | Table1.Occupation | Table2.ID |   Table2.Name   | Table2.Occupation
---------------------------------------------------------------------------------------------------
 1        | Garfield        | Student           | NULL      |      NULL       |  NULL

Где я ошибаюсь? Может ли кто-нибудь помочь решить эту проблему?

1 Ответ

0 голосов
/ 05 августа 2020

Проблема в последней части JOIN. Переместите последнюю часть в предложение WHERE.

Попробуйте следующий запрос:

SELECT *
FROM table1 t1
FULL JOIN table2 t2
ON t1.id = t2.id
AND t1.name = t2.name
WHERE (t1.occupation ILIKE ('%' || t2.occupation || '%') OR t2.occupation ILIKE ('%' || t1.occupation || '%'));

Примечание: Если Id равен Primary Key you можно опустить второе предложение JOIN:

SELECT *
FROM table1 t1
FULL JOIN table2 t2
ON t1.id = t2.id
WHERE (t1.occupation ILIKE ('%' || t2.occupation || '%') OR t2.occupation ILIKE ('%' || t1.occupation || '%'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...