连接 SQLite 表
Joining SQLite Tables
我有以下三个 table 作为任务 1、任务 2 和任务 3 table
enter image description here
我想加入所有这三个 table 结果应该如下所示
enter image description here
下面是我试过的查询,但它没有按预期工作
SELECT mission1_1.missionIdentifier, mission1_1.M1,mission2_2.M2,mission1_1.Timestamp
FROM mission1_1
INNER JOIN mission2_2 ON mission1_1.timeStamp = mission2_2.timeStamp
如果您 table 名称是 Mission1、Mission2 和 Mission3,并且所有 3 个都有 MissionIdentifier、Mission_id 和 Timestamp 列,那么您的查询将失败,因为:-
- 没有 table 名为 mission1_1
- 没有 table 名为 mission2_2
- table mission1 中没有 M1 列(假设 mission1 是正确的 table 名称)
- table mission2 中没有 M2 列(再次假设 mission2 是正确的 table 名称)
由于任务 3 table 未加入,您的查询无法产生任何接近预期的结果。
解决上述问题后,您似乎希望查询为:-
SELECT
mission1.missionIdentifier,
mission1.mission_id AS Mission_1,
mission2.mission_id AS Mission_2,
mission3.mission_id AS Mission_3,
mission1.Timestamp
FROM mission1
INNER JOIN mission2 ON mission1.timeStamp = mission2.timeStamp
INNER JOIN mission3 ON mission1.timestamp = mission3.timestamp
;
但是,这不会产生预期的结果。而不是指示的数据(除了 missionidentifiers 已被缩短,为简洁起见,数据的前 2 个字符)然后它将输出 :-
即您的 select 来自 mission1 table 的 2 行,然后从 mission2 table 的单行中添加额外的列,然后为 mission3 中的单行添加额外的列 table 和因此,所有数据的 2 行都具有相同的时间戳。
我怀疑您想要的可以通过以下查询实现,尽管它不是按照您显示的顺序:-
WITH cte AS (
SELECT mission_id,missionIdentifier, timestamp
FROM mission1
UNION SELECT mission_id,missionIdentifier, timestamp FROM mission2
UNION SELECT mission_id,missionIdentifier, timestamp FROM mission3
)
SELECT
cte.missionidentifier,
cte.mission_id,
mission1.mission_id AS mission1,
mission2.mission_id AS mission2,
mission3.mission_id AS mission3,
cte.timestamp AS timestamp
FROM cte
LEFT OUTER JOIN mission1 ON mission1.missionidentifier = cte.missionidentifier
LEFT OUTER JOIN mission2 ON mission2.missionidentifier = cte.missionidentifier
LEFT OUTER JOIN mission3 ON mission3.missionidentifier = cte.missionidentifier
ORDER BY cte.mission_id ASC
;
哪个 produces/results 在 :-
我有以下三个 table 作为任务 1、任务 2 和任务 3 table enter image description here
我想加入所有这三个 table 结果应该如下所示 enter image description here
下面是我试过的查询,但它没有按预期工作
SELECT mission1_1.missionIdentifier, mission1_1.M1,mission2_2.M2,mission1_1.Timestamp
FROM mission1_1
INNER JOIN mission2_2 ON mission1_1.timeStamp = mission2_2.timeStamp
如果您 table 名称是 Mission1、Mission2 和 Mission3,并且所有 3 个都有 MissionIdentifier、Mission_id 和 Timestamp 列,那么您的查询将失败,因为:-
- 没有 table 名为 mission1_1
- 没有 table 名为 mission2_2
- table mission1 中没有 M1 列(假设 mission1 是正确的 table 名称)
- table mission2 中没有 M2 列(再次假设 mission2 是正确的 table 名称)
由于任务 3 table 未加入,您的查询无法产生任何接近预期的结果。
解决上述问题后,您似乎希望查询为:-
SELECT
mission1.missionIdentifier,
mission1.mission_id AS Mission_1,
mission2.mission_id AS Mission_2,
mission3.mission_id AS Mission_3,
mission1.Timestamp
FROM mission1
INNER JOIN mission2 ON mission1.timeStamp = mission2.timeStamp
INNER JOIN mission3 ON mission1.timestamp = mission3.timestamp
;
但是,这不会产生预期的结果。而不是指示的数据(除了 missionidentifiers 已被缩短,为简洁起见,数据的前 2 个字符)然后它将输出 :-
即您的 select 来自 mission1 table 的 2 行,然后从 mission2 table 的单行中添加额外的列,然后为 mission3 中的单行添加额外的列 table 和因此,所有数据的 2 行都具有相同的时间戳。
我怀疑您想要的可以通过以下查询实现,尽管它不是按照您显示的顺序:-
WITH cte AS (
SELECT mission_id,missionIdentifier, timestamp
FROM mission1
UNION SELECT mission_id,missionIdentifier, timestamp FROM mission2
UNION SELECT mission_id,missionIdentifier, timestamp FROM mission3
)
SELECT
cte.missionidentifier,
cte.mission_id,
mission1.mission_id AS mission1,
mission2.mission_id AS mission2,
mission3.mission_id AS mission3,
cte.timestamp AS timestamp
FROM cte
LEFT OUTER JOIN mission1 ON mission1.missionidentifier = cte.missionidentifier
LEFT OUTER JOIN mission2 ON mission2.missionidentifier = cte.missionidentifier
LEFT OUTER JOIN mission3 ON mission3.missionidentifier = cte.missionidentifier
ORDER BY cte.mission_id ASC
;
哪个 produces/results 在 :-