【发布时间】:2017-12-06 02:46:44
【问题描述】:
编辑:可以找到此问题的扩展here
我想用 SQLite 连接四个不同的表,它们只有两列相同。请看下面的例子
+--------+---+-----+-----+
| table1 | | | |
+--------+---+-----+-----+
| a | b | lon | lat |
+--------+---+-----+-----+
| 1 | 2 | 111 | 222 |
+--------+---+-----+-----+
+--------+---+-----+-----+
| table2 | | | |
+--------+---+-----+-----+
| c | d | lon | lat |
+--------+---+-----+-----+
| 3 | 4 | 333 | 444 |
+--------+---+-----+-----+
+--------+---+-----+-----+
| table3 | | | |
+--------+---+-----+-----+
| e | f | lon | lat |
+--------+---+-----+-----+
| 5 | 6 | 555 | 666 |
+--------+---+-----+-----+
+--------+---+-----+-----+
| table4 | | | |
+--------+---+-----+-----+
| g | h | lon | lat |
+--------+---+-----+-----+
| 7 | 8 | 777 | 888 |
+--------+---+-----+-----+
这些表没有通过任何外键连接。此外,每一行的 lon/lat 值都不同。最佳输出是:
+------+------+------+------+------+------+------+------+-----+-----+
| a | b | c | d | e | f | g | h | lon | lat |
+------+------+------+------+------+------+------+------+-----+-----+
| None | None | 3 | 4 | None | None | None | NOne | 333 | 444 |
| 1 | 2 | None | None | None | None | None | None | 111 | 222 |
| None | None | None | None | 5 | 6 | None | None | 555 | 666 |
| None | None | None | None | None | None | 7 | 8 | 777 | 888 |
+------+------+------+------+------+------+------+------+-----+-----+
- 同样,这是我的最终目标 - 纬度/经度值在表之间不相互关联:
- 一个 |乙 | c | .. |纬度 |隆 |代替
- 一个 |乙 | c | .. | table1.lat | table2.lat | ...
- 感谢您的帮助!
- 我当前的代码
-- First two tables
CREATE VIEW ab AS
SELECT * FROM table1 LEFT JOIN table2 ON ???
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON ?? WHERE ?? IS NULL
-- 3rd and 4th table
CREATE VIEW cd AS
SELECT * FROM table3 LEFT JOIN table4 ON ??
UNION ALL
SELECT * FROM table4 LEFT JOIN table3 ON ?? WHERE ?? IS NULL
-- -- JOIN
SELECT * FROM cd LEFT JOIN ab ON ??
UNION ALL
SELECT * FROM cd LEFT JOIN ab ON ?? WHERE ?? IS NULL
【问题讨论】:
-
如果您不想要 user.longitude、university.longitude 等,那么纬度和经度中会有哪些值?他们将从哪里来?
-
@JINESHSHAH 我确实想在我的桌子上显示经度和纬度,但只有一次(参见示例)。我不想在上面有 user.longitude、university.longitude 等。我是否简洁地表达了自己?一个 |乙 | c | .. |纬度 |经度 |而不是 |乙 | c | .. |用户纬度 |大学.纬度 | ...
-
@AndrejCoding:请分享您从中导出样本所需输出的样本数据
-
@zarruq 你什么意思? :) 我自己创建了表格并输入了一些虚拟值来测试代码是否有效。我应该如何/具体分享什么?
-
@AndrejCoding:您只是分享您想要的输出,但它究竟是从哪些数据派生而来的?您的示例 table1、table2、table3 和 table4 没有数据..
标签: sql sqlite join full-outer-join