Join

SQL 查詢 - 我是否需要完全連接才能生成此組合結果?

  • January 4, 2019

兩個表的結構如下:

Table1                       Table2
----------------             ----------------
id, time, x                  id, time, y, z
1   1     1                  1   2     2  2
1   2     2                  1   3     3  3

我正在嘗試加入表格以獲得如下所示的結果:

Result
--------------------------------
id, time, x, y, z
1   1     1  
1   2     2  2  2
1   3        3  3

我能夠通過這樣的查詢獲得部分結果,但它返回 table2 中的所有值(包括不需要的 id)以及 table1 的連接值。

select * 
from Table1 
full outer join Table2 on Table1.time=Table2.time and Table1.id ='1' and Table2.id ='1'
order by Table2.time

有誰知道如何解決?如果這很重要,我正在嘗試在 AWS Athena/Prestodb 中執行此查詢。

謝謝您的幫助!

我不使用 amazon-presto,但我想知道您是否可以根據您的需要調整此 SQL Server 解決方案。

--demo setup
drop table if exists table1;
drop table if exists table2;
CREATE TABLE Table1
   (id int, time int, x int)
;

INSERT INTO Table1
   (id, time, x)
VALUES
   (1, 1, 1),
   (1, 2, 2)
;


CREATE TABLE Table2
   (id int, time int, y int, z int)
;

INSERT INTO Table2
   (id, time, y, z)
VALUES
   (1, 2, 2, 2),
   (1, 3, 3, 3)
;

------------------
--solution
;with cte as
(
select id, time from Table1
union
select id, time from Table2
)
SELECT c.id, c.TIME, t1.x, t2.y, t2.z
FROM cte c
LEFT JOIN table1 t1
   ON t1.id = c.id
       AND t1.TIME = c.TIME
LEFT JOIN table2 t2
   ON t2.id = c.id
       AND t2.TIME = c.TIME;

| id | TIME | x    | y    | z    |
|----|------|------|------|------|
| 1  | 1    | 1    | NULL | NULL |
| 1  | 2    | 2    | 2    | 2    |
| 1  | 3    | NULL | 3    | 3    |

引用自:https://dba.stackexchange.com/questions/226305