下面是一个类似于我真正问题的虚拟情况。Table1
recid firstname lastname company
1 A B AAA
2 D E DEF
3 G H IJK
4 A B ABC
我有一个表格2,看起来像这样
recid firstname lastname company
10 A B ABC
20 D E DEF
30 M D DIM
40 A B CCC
如果我将表格与 recid
相关联,那么结果将会是0
个结果,因为recid
是唯一的。但如果我将其与不唯一且存在重复的 firstname
和 lastname
列相连,那么在内部连接中将会得到重复项。当我在连接中添加更多列时,情况会变得更糟(会产生更多的重复项)。
在上述简单情况中,如何从以下查询中删除重复项? 我想要比较table2
中的firstname
和lastname
,如果它们匹配,则返回table2
中的firstname
,lastname
和recid
。
SELECT DISTINCT * FROM
(SELECT recid, first, last FROM table1) a
INNER JOIN
(SELECT recid, first,last FROM table2) b
ON a.first = b.first
如果有人想要在将来尝试运行这个脚本,可以在这里找到它。
CREATE TABLE table1 (recid INT NOT NULL PRIMARY KEY, first varchar(20), last varchar(20), company varchar(20))
CREATE TABLE table2 (recid INT NOT NULL PRIMARY KEY, first varchar(20), last varchar(20), company varchar(20))
INSERT INTO TABLE1 VALUES(1,'A','B','ABC')
INSERT INTO TABLE1 VALUES(2,'D','E','DEF')
INSERT INTO TABLE1 VALUES(3,'M','N','MNO')
INSERT INTO TABLE1 VALUES(4,'A','B','ABC')
INSERT INTO TABLE2 VALUES(10,'A','B','ABC')
INSERT INTO TABLE2 VALUES(20,'D','E','DEF')
INSERT INTO TABLE2 VALUES(30,'Q','R','QRS')
INSERT INTO TABLE2 VALUES(40,'A','B','ABC')
recid: 10,20,40
三行? - ypercubeᵀᴹ