我有两个桌子,可以说
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|
答案 0 :(得分:0)
似乎您需要一个UNION
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
答案 1 :(得分:0)
您正在描述full join
:
select pk1, pk2, pk3, t1.field1, t2.field2
from table1 t1 full join
table2 t2
using (pk1, pk2, pk3);