JOIN 删除重复行后的 SQL

新手上路,请多包涵

我有桌子 T1

 ID   STATUS
1    NEW
2    CLOSED
3    NEW

我有桌子 T2

 ID   OWNER
1    A
1    B
1    C
1    A
1    B
2    A
2    B
2    A
3    A

我想加入 T1 和 T2,并为每个不同的 ID 和每个不同的 OWNER 设置多行。如果 OWNER 在 T2 中重复多次,则应忽略该重复项并删除重复项。

所以最终期望的结果应该是:

 ID  STATUS  OWNER
1   NEW     A
1   NEW     B
1   NEW     C
2   CLOSED  A
2   CLOSED  B
3   NEW     A

因此,您可以看到应该删除重复项(同一 ID 的同一所有者多次)。我只需要将输出作为 ID 列表和该 ID 的每个不同的 OWNER,但他在 T2 表中负责多少次并不重要。我需要做出某种区分。

如果我像这样进行查询,我不会得到每个 ID 和 OWNER 的不同值,但在这种情况下我也有重复项。

     select t1.id,t1.status,t2.owner
    FROM  t1
    join t2
    on t1.id=t2.id

原文由 Veljko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 951
2 个回答

如果我理解正确,你需要这个:

 select T1.ID, T1.STATUS, t.OWNER from T1
inner join(
    select ID, OWNER from T2 group by ID, OWNER
) t
on T1.ID = t.ID

原文由 Oto Shavadze 发布,翻译遵循 CC BY-SA 3.0 许可协议

总而言之,相当蛋糕。

 create table #T1 ([ID] int, [Status] varchar(50))
INSERT INTO #T1 VALUES
(1, 'NEW'),
(2, 'CLOSED'),
(3, 'NEW')

create table #T2 ([ID] int, [Owner] varchar(50))
INSERT INTO #T2 VALUES
(1, 'A'),
(1, 'B'),
(1, 'C'),
(1, 'A'),
(1, 'B'),
(2, 'A'),
(2, 'B'),
(2, 'A'),
(3, 'A')

SELECT DISTINCT
 T.[ID],
 T.[Status],
 U.[Owner]
    FROM #T1 T
JOIN #T2 U ON T.[ID] = U.[ID]

我在 SSMS 中的 SQL Server 中执行了这项工作,但几乎任何与 SQL 兼容的引擎都应该毫无问题地完成这项工作。

抱歉,我认为在示例中可能需要学习一个独特的行减少课程,但后来只有 DISTINCT 完成了所有工作。

原文由 Hardryv 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进