有一张表如下:
name,phone
张三,11111
张经理,11111
张三,22222
李四,33333
王五,33333
王二,77777
小六,88888期望实现:将 name相同 or phone相同 的数据查出,返回像下面的结果:
name,phone
张三,11111
张经理,11111
张三,22222
李四,33333
王五,33333望各位大拿予以帮助.感谢.
name,phone
张三,11111
张经理,11111
张三,22222
李四,33333
王五,33333
王二,77777
小六,88888期望实现:将 name相同 or phone相同 的数据查出,返回像下面的结果:
name,phone
张三,11111
张经理,11111
张三,22222
李四,33333
王五,33333望各位大拿予以帮助.感谢.
where exists(select 1 from tb where (name=a.name and phone<>a.phone)
or (name<>a.name and phone=a.phone))
select *
from tb
where name in (select name from tb group by name having count(1) > 1)
or phone in (select phone from tb group by phone having count(1) > 1)
from tb
where name in (select name from tb group by name having count(1) > 1)
union
select *
from tb
where phone in (select phone from tb group by phone having count(1) > 1)
create table tb(name varchar(10),phone int)
insert into tb
select '张三',11111 union
select '张经理',11111 union
select '张三',22222 union
select '李四',33333 union
select '王五',33333 union
select '王二',77777 union
select '小六',88888 select * from tb a
where exists(select 1 from tb where (name=a.name and phone<>a.phone)
or (name<>a.name and phone=a.phone))
/*
name phone
---------- -----------
李四 33333
王五 33333
张经理 11111
张三 11111
张三 22222
抱歉, 您的也是正确的. 但是, 对于多个字段组合的时候,例如5个字段,需要对where条件进行重复拼装工作,同时我们这儿的开发规范不让用<>,所以选择了3楼的方法,见谅. 另,由衷的感谢您的指导.