![](/img/trans.png)
[英]SAS SQL: Many to many relationships with 2 tables BUT don't want multiple rows
[英]SQL Server query - don't want multiple rows with identical data
我有一个具有以下三个表的SQL Server数据库-本文对此进行了简化。
Stakeholder
表(用于存储人员个人数据...名称,地址城市,州,邮政编码等的表)
Stakeholder_id full_name
---------------------------------------
1 Joe Stakeholder
2 Eric Stakeholder
SH Inquiry
表(存储有关利益相关方何时与我们联系的信息的表)
sh_inquiry_id inquiry_link_ID
-----------------------------------------------
1 1
2 1
3 2
Sh Contacts
(存储有关我们何时与利益相关者联系的信息的表)
sh_contact_id contact_link_id
-----------------------------------------
1 1
2 1
3 2
我想编写一个显示利益相关者信息的SQL查询,然后在利益相关者行下方显示所有查询和所有联系人? SQL有可能吗? 因此,在这种情况下,将显示一次joe涉众,然后接下来将有4行(2个查询和2个联系人)。 埃里克(Eric)利益相关者将被显示一次,其中有两行,1个询问和1个联系人。
感谢您的任何提前帮助。
如前所述,您可能希望在应用程序代码中处理此问题。 但是,您可以使用UNION
查询来执行所需的操作。
在下面的查询中,我将后两个表更改为SH_Inquiry
和SH_Contacts
(带下划线的空格),这通常是一个好习惯(在对象名称中留有空格是个坏主意)。 另外,根据表的布局方式,您可能希望合并Contacts
和Inquiry
表(例如,有一个表,以及一个contact_type
字段,将其标识为“入站”或“出站”)。
无论如何,使用CTE和联合:
WITH Unionized AS
(
SELECT
stakeholder_id,
full_name,
NULL AS contact_or_inquiry,
NULL AS contact_or_inquiry_id
FROM Stakeholder
UNION ALL
SELECT
inquiry_link_id AS stakeholder_id,
NULL AS full_name,
'inquiry' AS contact_or_inquiry,
sh_inquiry_id AS contact_or_inquiry_id
FROM SH_Inquiry
UNION ALL
SELECT
contact_link_id AS stakeholder_id,
NULL AS full_name,
'contact' AS contact,
sh_contact_id AS contact_or_inquiry_id
FROM SH_Contacts
)
SELECT
full_name,
contact_or_inquiry,
contact_or_inquiry_id
FROM Unionized
ORDER BY
stakeholder_id,
contact_or_inquiry,
contact_or_inquiry_id
给您这些结果:
+------------------+--------------------+-----------------------+
| full_name | contact_or_inquiry | contact_or_inquiry_id |
+------------------+--------------------+-----------------------+
| Joe Stakeholder | NULL | NULL |
| NULL | contact | 1 |
| NULL | contact | 2 |
| NULL | inquiry | 2 |
| Eric Stakeholder | NULL | NULL |
| NULL | contact | 3 |
| NULL | inquiry | 1 |
| NULL | inquiry | 3 |
+------------------+--------------------+-----------------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.