Sql Left соединяет две таблицы в одном столбце и внешнее объединяет два других столбца - PullRequest
0 голосов
/ 05 июня 2019

У меня есть две таблицы, скажем,

Table1
| pk1        | pk2         | pk3         |field1      |
|:-----------|------------:|:-----------:|:-----------|
| 1          | 1           | 1           |        abc1|
| 1          | 1           | 2           |        abc2|
| 2          | 1           | 2           |        abc3|
| 3          | 2           | 1           |        abc4|
| 4          | 1           | 2           |        abc5|
| 5          | 3           | 1           |        abc6|
| 6          | 1           | 1           |        abc7|

Table2
| pk1        | pk2         | pk3         |field2      |
|:-----------|------------:|:-----------:|:-----------|
| 1          | 1           | 1           |         bc1|
| 1          | 3           | 4           |         bc2|
| 2          | 2           | 1           |         bc3|
| 5          | 1           | 2           |         bc4|
| 7          | 3           | 1           |         bc5|
| 8          | 1           | 1           |         bc6|

Слева сначала соединяются две таблицы на pk1, поэтому я получаю записи с pk1 = 1,2,5

А затем полное другое соединение двух таблиц на pk2 и pk3, так что я получаю этот результат:

| pk1        | pk2         | pk3         |field1      |field2      |
|:-----------|------------:|:-----------:|:-----------|:-----------|
| 1          | 1           | 1           |        abc1|         bc1|
| 1          | 1           | 2           |        abc2|            |
| 1          | 3           | 4           |            |         bc2|
| 2          | 1           | 2           |        abc3|            |
| 2          | 2           | 1           |            |         bc3|
| 5          | 3           | 1           |        abc6|            |
| 5          | 1           | 2           |            |         bc4|

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Вы описываете full join:

select pk1, pk2, pk3, t1.field1, t2.field2 
from table1 t1 full join
     table2 t2
     using (pk1, pk2, pk3);
0 голосов
/ 05 июня 2019

Кажется, вам нужен СОЮЗ

select t1.pk1, t1.pk2, t1.pk3, t1.field1, t2.field2 
from table1 t1
LEFT join  table2 t2 on t1.pk1 = t2.pk1 
    and t1.pk2 = t2.pk2 
      and t1.pk3 = t2.pk3
UNION 
select t2.pk1, t2.pk2, t2.pk3,null, t2.field2 
from table2 t2 
INNER JOIN table1 ON t1.k1 = t2.pk1
order by t1.pk2, t1.pk3, t1.field1, t2.field2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...