SQL - ВНЕШНЕЕ СОЕДИНЕНИЕ С ОБЪЕДИНЕННЫМИ таблицами - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в sql.У меня есть три таблицы, я хочу UNION первые две таблицы, затем OUTER JOIN результат с третьей таблицей и только выбор нужной даты.

Я уже сделал UNION, но я нене знаю, как придет OUTER JOIN.

Это мои таблицы:

TABLE_1

| ID   | Name     |
-------------------
| 1    | John     |
| 2    | Peter    |
TABLE_2

| ID   | Name     |
-------------------
| 3    | Anne     |
| 4    | May      |
TABLE_3

| ID   | Name     | Date       |
--------------------------------
| 2    | Peter    | 2019-02-13 |
| 3    | Anne     | 2019-02-12 |
| 4    | May      | 2019-02-13 |

Это мой запрос, который объединяет только TABLE_1 иTABLE_2:

SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TABLE_2

Я хочу, чтобы конечный результат возвращал идентификатор и имя из TABLE_1 и TABLE_2, где дата в TABLE_3 равна 2019-02-13.

Iхочу, чтобы это выглядело так:

| ID   | Name     | Date       |
--------------------------------
| 2    | Peter    | 2019-02-13 |
| 4    | May      | 2019-02-13 |

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Попробуйте,

SELECT A.* FROM
(
  SELECT ID, Name FROM TABLE_1 
  UNION
  SELECT ID, Name FROM TABLE_2
 ) AS A
 JOIN TABLE_3
 ON TABLE_3.ID = A.ID AND TABLE_3.DATE = "2019-02-13"

DB Fiddle Here

0 голосов
/ 13 февраля 2019

Один из подходов здесь состоит в том, чтобы не использовать запрос объединения, а вместо этого использовать существующие подзапросы для проверки существования каждой записи TABLE_3 в любой из первых двух таблиц.

SELECT t3.ID, t3.Name, t3.Date
FROM TABLE_3 t3
WHERE
    t3.Date = '2019-02-13' AND (
    EXISTS (SELECT 1 FROM TABLE_1 t1 WHERE t1.ID = t3.ID) OR
    EXISTS (SELECT 1 FROM TABLE_2 t2 WHERE t2.ID = t3.ID));
...