【发布时间】:2018-05-19 22:07:38
【问题描述】:
这个问题是这个post的扩展
我想用 SQLite 连接四个不同的表,它们只有两列共有。但是,假设有 30 多列,即不仅仅是列 a - h。请看下面的例子
表 1:
a b lon lat
---------------
22 33 11 22
表 2:
c d lon lat
---------------
1 2 44 45
Table3
e f lon lat
-----------------------
NULL NULL 100 101
Table4
g h lon lat
-----------------------
NULL NULL 200 201
目前的解决方案如下
SELECT a,b,NULL AS c, NULL AS d,NULL AS e, NULL AS f, NULL AS g, NULL AS h,
lon,lat
FROM table1
UNION ALL
SELECT NULL, NULL,c,d,NULL AS e, NULL AS f, NULL AS g, NULL AS h, lon,lat
FROM table2
UNION ALL
SELECT NULL, NULL,NULL,NULL,e,f, NULL AS g, NULL AS h, lon,lat
FROM table3
UNION ALL
SELECT NULL, NULL,NULL,NULL,NULL,NULL,g,h, lon,lat
from table4
结果:
+------+------+------+------+------+------+------+------+-----+-----+
| a | b | c | d | e | f | g | h | lon | lat |
+------+------+------+------+------+------+------+------+-----+-----+
| 22 | 33 | NULL | NULL | NULL | NULL | NULL | NULL | 11 | 22 |
| NULL | NULL | 1 | 2 | NULL | NULL | NULL | NULL | 44 | 45 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 100 | 101 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 200 | 201 |
+------+------+------+------+------+------+------+------+-----+-----+
- 问题:如果我不仅有 a 到 h 列,还有 a 到 z 列,即 table1、table2、table3 和 table4 中的许多列 -> 这将非常耗时且结构不会清楚我是否必须在我的 sql 语句中到处写 NULL 作为 [字母]
- @zarruq 帮了大忙,他建议在这种情况下,我可以使用 `UNION ALL` 然后使用 `PIVOT` 将列转换为行
- 但是,我不知道该怎么做。而且,我不知道 100% 他的意思。
- 编辑:SQLite 不支持数据透视:还有其他建议吗?
【问题讨论】:
标签: sql sqlite join full-outer-join