我对 SQL 还很陌生。我有一个查询要构造并填充一个像这样的表:
SELECT
A.ID as Identification,
B.Name as Family_name,
B.Firstname as first_name,
B.Address as adress_1
FROM A
LEFT JOIN B ON B.ID = A.ID
UNION
SELECT
C.ID as Identification,
D.Name as Family_name,
D.Firstname as first_name,
D.Address as adress_1
FROM C
LEFT JOIN D on D.ID = C.ID
UNION
...
有没有办法在开头添加“DISTINCT”,以便当Identification、Family_name 和First_name(但不是ADRESS_1)相同时,只出现一行?
例如:
身份证明 | 姓氏 | 名字 | 地址_1 |
---|---|---|---|
护照 | 德米尔 | 阿桑 | 大街123号 |
驾照 | 德米尔 | 阿桑 | 唐宁街 10 号 |
护照 | 德米尔 | 艾莉芙 | 大街123号 |
我看到了一些解决方案,但有第二个查询,而不是同一个查询。 感谢您的帮助 阿肯
我尝试过
DISTINCT (ID, name, firstname) from ( Myquery)
但是没有成功。我也尝试过:
Select Distinct Identification, Family_Name, First_Name
Union
Select
A.ID as Identification,
...
这似乎效果更好,但我收到一条错误消息
“身份”不是有效列。
我会这样做的方式是:
WITH raw AS (
SELECT
A.ID as Identification,
B.Name as Family_name,
B.Firstname as first_name,
B.Address as adress_1
FROM A
LEFT JOIN B ON B.ID = A.ID
UNION
SELECT
C.ID as Identification,
D.Name as Family_name,
D.Firstname as first_name,
D.Address as adress_1
FROM C
LEFT JOIN D on D.ID = C.ID
UNION
...
)
SELECT
Identification, Family_name, first_name, STRING_AGG(address_1, ', ') AS address_1
FROM raw
GROUP BY Identification, Family_name, first_name