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 语句如何将3个表合并成一个表?

sql server 2008中“Merge”子句的性能如何?

将多个 SQL Server 表合并为一个

这个sql语句怎么写sqlserver

SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组

SQL sever 2008 如何根据一个表中的两个时间计算出时间差