SQL Server 2008 将两个表合并为一个但得到重复的行
Posted
技术标签:
【中文标题】SQL Server 2008 将两个表合并为一个但得到重复的行【英文标题】:SQL server 2008 merge two tables into one but get duplicated rows 【发布时间】:2014-05-22 16:56:02 【问题描述】:我需要通过 SQL Server 2008 合并两个表。
表1:
col col1 col2_a
yyy ddd 1589
表2:
col col1 col2_b
yyy ddd 6231
表中 col 和 col1 的值相同,只有 col2 不同。 我需要将它们合并到一张表中。
SELECT a.col , a.col1, a.col2_a, b.col2_b
FROM table1 as a, table2 as b
WHERE a.col = b.col AND a.col1 = b.col1
但是,对于每个 col 和 col1 组合,这给了我 4 个重复的行。
任何帮助将不胜感激。
我希望:
col col1 cola colb
yyy ddd 1589 6231
【问题讨论】:
能否提供样本数据? 能否展示示例数据和预期输出? 请看我的更新。 @user3601704 我看不到您对样本数据的查询是否有任何重复。 您的查询似乎返回了正确的结果 【参考方案1】:如果您只是想消除完全重复的行,您可以简单地使用DISTINCT
;
SELECT DISTINCT a.col , a.col1, a.col2_a, b.col2_b
FROM table1 as a
JOIN table2 as b
ON a.col = b.col AND a.col1 = b.col1
如果您只希望 table2 中的 一个 值(例如最大一个),即使有几行匹配,您也可以从 table1 中选择行,并且只从 table2 中选择 b.col2 的最大匹配值;
SELECT DISTINCT a.col , a.col1, a.col2_a, MAX(b.col2_b) col2_b
FROM table1 as a
JOIN table2 as b
ON a.col = b.col AND a.col1 = b.col1
GROUP BY a.col, a.col1, a.col2
【讨论】:
以上是关于SQL Server 2008 将两个表合并为一个但得到重复的行的主要内容,如果未能解决你的问题,请参考以下文章
sql server 2008中“Merge”子句的性能如何?