SQL UNION和合并

sho*_*ave 0 sql sql-server union merge

我有多个涉及许多表和联接的选择语句。所有选择语句具有相同的标题。我正在尝试将所有这些组合到单个结果集中。那么哪种方法是更好的SQL UNION还是MERGE?我知道UNION是A + B。因此,如果表A中的列为NULL,而表B中的列具有值,那么UNION会给我两行吗?因此,如果我想根据ID将所有行合并为单个行,应该使用MERGE吗?我可以选择在SQL或SSIS中执行此操作。

SELECT ID, NAME, VitalName as VitalName FROM TABLE A
UNION
SELECT ID, NAME, VitalReadings as VitalName FROM TABLE B
Run Code Online (Sandbox Code Playgroud)

表A

+----+------+-----------+
| ID | Name | VitalName |
+----+------+-----------+
|  1 | AAA  | HeartRate |
|  2 |      | Systolic  |
|  3 |      | Diastolic |
+----+------+-----------+
Run Code Online (Sandbox Code Playgroud)

表B

+----+------+---------------+
| ID | Name | VitalReadings |
+----+------+---------------+
|  1 | AAA  | HeartRate     |
|  2 | BBB  | Systolic      |
+----+------+---------------+
Run Code Online (Sandbox Code Playgroud)

预期结果

+----+------+---------------+
| ID | Name | VitalName     |
+----+------+---------------+
|  1 | AAA  | HeartRate     |
|  2 | BBB  | Systolic      |
|  3 |      | Diastolic     |
+----+------+---------------+
Run Code Online (Sandbox Code Playgroud)

Ser*_*lan 5

UNIONMERGE完全不同的概念,两者没有解决您的问题。但是可以FULL JOIN用来做这个。

DECLARE @TableA TABLE (ID INT,  Name VARCHAR(10), VitalName VARCHAR(10))
INSERT INTO @TableA VALUES
(1,'AAA','HeartRate'),
(2,NULL,'Systolic'),
(3,NULL,'Diastolic')

DECLARE @TableB TABLE ( ID INT,  Name VARCHAR(10), VitalReadings VARCHAR(10))

INSERT INTO @TableB VALUES
(1,'AAA','HeartRate'),
(2,'BBB','Systolic')


SELECT 
    A.ID, 
    COALESCE(A.Name, B.Name) Name,
    COALESCE(A.VitalName, B.VitalReadings) VitalName
FROM 
    @TableA A 
    FULL JOIN @TableB B ON A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)

结果:

ID          Name       VitalName
----------- ---------- ----------
1           AAA        HeartRate
2           BBB        Systolic
3           NULL       Diastolic
Run Code Online (Sandbox Code Playgroud)