小编典典

SQL-选择两列中具有相同值的行

sql

该主题的解决方案使我不知所措。

我有一个看起来像的表格(除与我的问题无关的其他字段之外):

名称,卡号,会员类型

现在,我想要一个显示卡号和成员类型相同的行的视图。这两个字段都是整数。名称为VARCHAR。名称不是唯一的,并且相同的名称也应显示重复的卡号,会员类型。

即,如果下表是表格:

JOHN       | 324   | 2
PETER      | 642   | 1
MARK       | 324   | 2
DIANNA     | 753   | 2
SPIDERMAN  | 642   | 1
JAMIE FOXX | 235   | 6

我想要:

JOHN       | 324   | 2
MARK       | 324   | 2
PETER      | 642   | 1
SPIDERMAN  | 642   | 1

只需按卡号排序即可使其对人类有用。

最有效的方法是什么?


阅读 574

收藏
2021-03-23

共1个答案

小编典典

由于您提到的名称可以重复,并且重复的名称仍然表示另一个人,并且应该显示在结果集中,因此我们需要使用GROUP BY HAVING COUNT(*)>
1来真正检测重复。然后将其返回主表以获取完整的结果列表。

另外,由于您的评论听起来像是将其包装到视图中,因此您需要将子查询分开。

CREATE VIEW DUP_CARDS
AS
SELECT CARDNUMBER, MEMBERTYPE
FROM mytable t2
GROUP BY CARDNUMBER, MEMBERTYPE
HAVING COUNT(*) > 1

CREATE VIEW DUP_ROWS
AS
SELECT t1.*
FROM mytable AS t1
INNER JOIN DUP_CARDS AS DUP
ON (T1.CARDNUMBER = DUP.CARDNUMBER AND T1.MEMBERTYPE = DUP.MEMBERTYPE )

SQL小提琴示例

2021-03-23