【发布时间】:2018-07-10 14:41:56
【问题描述】:
我想将三个表连接在一起并创建一个视图作为查找。问题是我得到了重复的provider id,因为provider_name 不同。
表1
provider_id provider_name
545 Kent Hospital
表2
provider_id provider_name
565 Devin Hospital
表 3
provider_id provider_name
545 Kent Medical Center
我得到了:
provider_id provider_name
545 Kent Hospital
545 Kent Medical Center
565 Devin Hospital
最终预期结果:
provider_id provider_name
545 Kent Hospital
565 Devin Hospital
实际上,使用哪个名称并不重要,因为它们通常几乎相同。
但问题是我在provider_id 中得到重复记录,这导致在我与其他表的连接中出现重复记录。我知道有一些方法可以使用this 之类的方法在连接端点表时避免这种情况,但对我来说,这似乎是一种绷带,而不是核心解决方案。
我目前的做法:
--CREATE VIEW lookup_providers AS
SELECT DISTINCT provider_id, provider_name
FROM table1
UNION
SELECT DISTINCT provider_id, provider_name
FROM table2
UNION
SELECT DISTINCT provider_id, provider_name
FROM table3
示例表
CREATE TABLE table1 (provider_id nvarchar(30), provider_name nvarchar(30))
CREATE TABLE table2 (provider_id nvarchar(30), provider_name nvarchar(30))
CREATE TABLE table3 (provider_id nvarchar(30), provider_name nvarchar(30))
INSERT INTO table1 (provider_id, provider_name) VALUES ('545','Kent Hospital')
INSERT INTO table2 (provider_id, provider_name) VALUES ('565','Devin Hospital')
INSERT INTO table3 (provider_id, provider_name) VALUES ('545','Kent Medical Center')
【问题讨论】:
-
当同一个provider_id出现在两个不同的表中时,你需要决定怎么做。 sql中没有DWIM命令。
-
与答案无关,但是在同一个查询中使用 DISTINCT 和 UNION 只是多余的。保留 UNION(首选)或 DISTINCT 语句。
标签: sql sql-server join view