select * from cards
where name=name and streetname=streetname and streetnumber<>streetnumber
这是我在脑海中尝试过但却无济于事的原因
我正在尝试的是我只希望显示
当街道号码不同时。
所以例如
Rene ter Horst : AvanueRoad : 11
Rene ter Horst : AvanueRoad : 23
Rene ter Horst : AvanueRoad : 11
Rene ter Horst : AvanueRoad : 17
Rene ter Horst : AvanueRoad : 11
Rene ter Horst : AvanueRoad : 11
Anna ter Horst : AvanueRoad : 11
Anna ter Horst : AvanueRoad : 11
Anna ter Horst : AvanueRoad : 11
Anna ter Horst : AvanueRoad : 11
John ter Horst : AvanueRoad : 11
但我有超过40,000件要检查的东西,所以我看不出手册
所以我想我需要实现一些计数
我只想让Rene ter Horst回归,因为它有差异
但我不想让Anna或John返回以及其他所有拥有相同姓名,地址和门牌号码的人
感谢任何帮助和术语*
我想强调一下,如果我不清楚,我无法搜索任何具体的数据库,必须弄清楚它的名字是Rene的6倍和AvanueRoad的6倍,并且它没有相同门牌号的6倍。对不起,如果我的问题听起来很模糊
答案 0 :(得分:3)
使用聚合而不仅仅是选择来考虑这一点。 having
子句应该进行所需的过滤:
select name
from cards
group by name
having min(streetname) <> max(streetname) or
min(streetnumber) <> max(streetnumber);
您的数据没有任何NULL
值。如果确实如此,并且您希望将它们视为不同的值,则逻辑需要更复杂一些:
select name
from cards
group by name
having min(streetname) <> max(streetname) or count(*) <> count(streetname) or
min(streetnumber) <> max(streetnumber) or count(*) <> count(streetnumber);
答案 1 :(得分:0)
最好的方式可能是Gordon建议的GROUP BY,但这是另一种方法:
SELECT DISTINCT Name FROM cards c
WHERE EXISTS
(SELECT * FROM cards
WHERE c.Name = Name
AND c.HouseNumber != HouseNumber);
答案 2 :(得分:-2)
使用SQL Unique修饰符:
SELECT DISTINCT `streetnumber` FROM `cards`