我尝试比较同一个表中的记录,因此我通过字段ID、X、Y和Z选择记录,并在X、Y和/或Z相等的情况下匹配它们。为了进行比较,我将表连接到自身,然后将每条记录与其他记录进行比较
我的问题是,如果我有一个记录A与字段Z上的10个其他记录B-K相匹配,那么它将列出在表的第二个实例中找到的每个记录B-K,以及在表的第一个实例中找到的A。然后,当它在表的第一个实例中找到B-K中的每个记录时,它将再次列出每个匹配的记录。在本例中,有11条记录与字段Z匹配,由于搜索的性质,我将收到121行。我希望能够将副本标记为一对记录,而不管它们是以哪种方式配对的。
结果可能在字段Z上列出为A和C匹配。然后我希望它识别作为匹配的C和A是A和C作为匹配的副本。
我使用以下代码进行查询
SELECT T1.ID AS ID1,
T2.ID AS ID2,
T1.X AS X1,
T2.X AS X2,
T1.Y AS Y1,
T2.Y AS Y2,
T1.Z AS Z1,
T2.Z AS Z2
FROM (SELECT ID,
X,
Y,
Z
FROM TABLE) T1
JOIN (SELECT ID,
X,
Y,
Z
FROM TABLE) T2
ON ( T1.X = T2.X
OR T1.Y = T2.Y
OR T1.Z = T2.Z)
AND T1.ID <> T2.ID;发布于 2013-11-07 18:08:15
要让每一对都只出现一次,可以尝试将最后一行更改为
AND T1.ID < T2.ID;发布于 2013-11-07 18:11:01
您可能想要使用exists()。
select < some columns >
from table x as x1
where exists (select 1
from table x as x2
where (x1.x = x2.x or x1.y = x2.y or x1.z = x2.z)
and x1.id <> x2.id)https://stackoverflow.com/questions/19832991
复制相似问题