SQL查找相似的行而不进行所有组合
我有一个SQL表:SQL查找相似的行而不进行所有组合,sql,select,Sql,Select,我有一个SQL表: CREATE TABLE DATA ( ID NUMBER NOT NULL, CODE VARCHAR(32) NOT NULL, DESCRIPTION VARCHAR(256), PRIMARY KEY (ID) ); 其中的一些价值观如下: ID CODE DESC 1 'A' 'AAAA' 2 'B' 'BBB' 3
CREATE TABLE DATA (
ID NUMBER NOT NULL,
CODE VARCHAR(32) NOT NULL,
DESCRIPTION VARCHAR(256),
PRIMARY KEY (ID)
);
其中的一些价值观如下:
ID CODE DESC
1 'A' 'AAAA'
2 'B' 'BBB'
3 'A' 'AGAIN'
4 'C' 'CCC'
5 'A' 'ABBA'
我希望检索具有类似代码的所有行,因为我需要在“代码”列上添加唯一约束
我有一个疑问:
select distinct
t1.code, t1.id, t1.description, t2.id, t2.description
from
data t1, data t2
where
t1.code = t2.code and t1.id != t2.id
order by t1.code
返回给我这个结果集:
A 5 ABBA 1 AAAA
A 3 AGAIN 1 AAAA
A 1 AAAA 5 ABBA
A 1 AAAA 3 AGAIN
A 3 AGAIN 5 ABBA
A 5 ABBA 3 AGAIN
如何调整查询以放弃已列出差异的组合?
在本例中,我只希望有以下行:
A 1 AAAA 3 AGAIN
A 1 AAAA 5 ABBA
A 3 AGAIN 5 ABBA
每两行中只能取一行,例如:
select distinct
t1.code, t1.id, t1.description, t2.id, t2.description
from
data t1, data t2
where
t1.code = t2.code and t1.id < t2.id
order by t1.code
选择distinct
t1.code,t1.id,t1.description,t2.id,t2.description
从…起
数据t1,数据t2
哪里
t1.code=t2.code和t1.id
非常感谢,这是个好把戏。。。但是,如果基于id以外的其他字段进行比较,该怎么办呢?您可以将不等式运算符用于其他数据类型。另一个问题可能是,如果有两行以上的代码相同,那么在这种情况下可能需要更复杂的查询。