Я хочу сравнить значение таблицы 1 с таблицей 2, но не только с одним столбцом, но и с несколькими столбцами, а также включить дату.
Таблица 1
----+-----------+
| Id | date |
| 1 | 4/15/2020 |
| 2 | 4/16/2020 |
| 3 | 4/17/2020 |
| 4 | 4/18/2020 |
| 5 | 4/19/2020 |
| 6 | 4/20/2020 |
| 7 | 4/21/2020 |
| 8 | 4/22/2020 |
| 9 | 4/23/2020 |
| 10 | 4/24/2020 |
| 11 | 4/25/2020 |
| 12 | 4/26/2020 |
| 13 | 4/27/2020 |
| 14 | 4/28/2020 |
| 15 | 4/29/2020 |
| 16 | 4/30/2020 |
| 17 | 5/1/2020 |
| 18 | 5/2/2020 |
| 19 | 5/3/2020 |
| 20 | 5/4/2020 |
+----+-----------+
Таблица 2
+-------+------+-------+--------+------+-------+
| Batch | call | Zone | Batch2 | call | zone |
| 1 | A | South | 100 | B | North |
| 15 | A | South | 102 | B | North |
| 22 | A | South | 105 | B | North |
| 30 | A | South | 605 | B | North |
| 2 | A | South | 44 | B | North |
| 8 | A | South | 78 | B | North |
| 75 | A | South | 1 | B | North |
| 80 | A | South | 2 | B | North |
| 6 | A | South | 3 | B | North |
| 4 | A | South | 78 | B | North |
| 8 | A | South | 6 | B | North |
| 45 | A | South | 9 | B | North |
| 60 | A | South | 78 | B | North |
| 78 | A | South | 9 | B | North |
| 34 | A | South | 10 | B | North |
| 80 | A | South | 11 | B | North |
| 46 | A | South | 12 | B | North |
| 77 | A | South | 789 | B | North |
| 95 | A | South | 456 | B | North |
| 400 | A | South | 658 | B | North |
+-------+------+-------+--------+------+-------+
Результат:
+-------+------+-----------+------+-------+--------+------+-------+------+-------+
| Batch | id | date | call | Zone | Batch2 | id | date | call | zone |
| 1 | 1 | 4/15/2020 | A | South | 100 | #N/A | #N/A | B | North |
| 15 | 15 | 4/29/2020 | A | South | 102 | #N/A | #N/A | B | North |
| 22 | #N/A | #N/A | A | South | 105 | #N/A | #N/A | B | North |
| 30 | #N/A | #N/A | A | South | 605 | #N/A | #N/A | B | North |
| 2 | 2 | 4/16/2020 | A | South | 44 | #N/A | #N/A | B | North |
| 8 | 8 | 4/22/2020 | A | South | 78 | #N/A | #N/A | B | North |
| 75 | #N/A | #N/A | A | South | 1 | 1 | 43936 | B | North |
| 80 | #N/A | #N/A | A | South | 2 | 2 | 43937 | B | North |
| 6 | 6 | 4/20/2020 | A | South | 3 | 3 | 43938 | B | North |
| 4 | 4 | 4/18/2020 | A | South | 78 | #N/A | #N/A | B | North |
| 8 | 8 | 4/22/2020 | A | South | 6 | 6 | 43941 | B | North |
| 45 | #N/A | #N/A | A | South | 9 | 9 | 43944 | B | North |
| 60 | #N/A | #N/A | A | South | 78 | #N/A | #N/A | B | North |
| 78 | #N/A | #N/A | A | South | 9 | 9 | 43944 | B | North |
| 34 | #N/A | #N/A | A | South | 10 | 10 | 43945 | B | North |
| 80 | #N/A | #N/A | A | South | 11 | 11 | 43946 | B | North |
| 46 | #N/A | #N/A | A | South | 12 | 12 | 43947 | B | North |
| 77 | #N/A | #N/A | A | South | 789 | #N/A | #N/A | B | North |
| 95 | #N/A | #N/A | A | South | 456 | #N/A | #N/A | B | North |
| 400 | #N/A | #N/A | A | South | 658 | #N/A | #N/A | B | North |
+-------+------+-----------+------+-------+--------+------+-------+------+-------+
Запрос:
select batch,
(case when batch=id then id else null end ) id,
(case when batch=id then date else null end) date,
call,
zone,
batch2,
(case when batch2=id then id else null end ) id1,
(case when batch2=id then date else null end) date1,
call,
zone
table1 x
left join table2 y on x.id=y.batch and x.id=y.batch2
1 ответ
Ваша проблема в том, что вам нужно дважды JOIN
table2 to table1, один раз, чтобы получить дату первого пакета, и один раз, чтобы получить вторую:
select y.batch1,
(case when y.batch1=x1.id then x1.id else null end ) id1,
(case when y.batch1=x1.id then x1.date else null end) date1,
call1,
zone1,
y.batch2,
(case when y.batch2=x2.id then x2.id else null end ) id2,
(case when y.batch2=x2.id then x2.date else null end) date2,
call2,
zone2
from table2 y
left join table1 x1 on x1.id=y.batch1
left join table1 x2 on x2.id=y.batch2
Вывод слишком длинный для вставки сюда, но есть демонстрация на SQLFiddle.
Обратите внимание, что мне пришлось изменить имена некоторых столбцов, поскольку в таблице 2 есть дубликаты.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.