我有一些与外键相关的表,需要从中获取数据,它们的结构如下:
Table A Intermediate A Child A
| id | Data | idTableA | idChildA | id | Child A
| 1 | 'Data 1' | 1 | 1 | 1 | 'Child 1'
| 2 | 'Data 2' | 1 | 2 | 2 | 'Child 2'
| 3 | 'Data 3' | 1 | 3 | 3 | 'Child 3'
| 2 | 4 (...)
| 2 | 5
| 3 | 6
| 3 | 6
Intermediate B Child B
| idTableA | idChildB | id | Child B
| 1 | 4 | 4 | 'Child 1'
| 1 | 5 | 5 | 'Child 2'
| 1 | 6 | 6 | 'Child 3'
| 2 | 6 (...)
| 2 | 7
| 3 | 8
| 3 | 9
我要做的是从两个子表中获取与中间表中的
Table A
键一致但不合并数据的所有记录。像这样的: Result
|idTableA|ChildA |Child B |
|1 |'Child1'|null |
|1 |'Child2'|null |
|1 |'Child3'|null |
|1 |null |'Child4'|
|1 |null |'Child5'|
|1 |null |'Child6'|
|2 |'Child4'|null |
|2 |'Child5'|null |
|2 |null |'Child6'|
|2 |null |'Child7'|
(...)
我一直在向中间表和子表应用程序,但都没有成功地从子表中检索混合数据,在子表中我应该得到空值。
有什么想法吗?
最佳答案
您应该从单独的子表中选择行,然后在这两个子表之间执行UNION
操作,为另一个子表中的字段指定NULL
:
SELECT main1.id AS idTableA, ca.childA, NULL::text AS childB
FROM tableA main1
JOIN intermediateA ia ON main1.id = ia.idTableA
JOIN childA ca ON ca.id = ia.idChildA
UNION
SELECT main2.id AS idTableA, NULL, cb.childB
FROM tableA main2
JOIN intermediateB ib ON main2.id = ib.idTableA
JOIN childB cb ON cb.id = ib.idChildB
ORDER BY 1, 2, 3;
关于sql - 从同一行中的多个子表返回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40559087/