如何在一个字段中查找重复项而在另一个字段中不重复

How to find duplicates in one field which are not duplicates in another

我正在尝试从 table 中提取帐号和邮政编码,其中邮政编码重复但帐号不重复(仅在存在邮政编码的情况下)

例如,一个名为 mailing 的 table 具有以下字段:-

acc....custname.............postcode
B102...BILLYS SHOES.........LE54 2YZ
B104...BILLYS SHOES.........LE54 2YZ
D200...FANSY................RM5 6LW
D200...FANSY(2ND ACCOUNT)...RM5 6LW
T502...WELLIES R US.........
T502...WELLIES R US.........
    ...THE SHOE SHOP........DN54 05Y
X102...THE SHOE SHOP........DN54 05Y

因此,我尝试按计数大于 1 的邮政编码分组,效果很好,并显示

acc....custname.............postcode
B102...BILLYS SHOES.........LE54 2YZ
B104...BILLYS SHOES.........LE54 2YZ
D200...FANSY................RM5 6LW
D200...FANSY(2ND ACCOUNT)...RM5 6LW
    ...THE SHOE SHOP........DN54 05Y
X102...THE SHOE SHOP........DN54 05Y

但是我需要能够只显示账号不重复的地方,即如下

acc....custname.............postcode
B102...BILLYS SHOES.........LE54 2YZ
B104...BILLYS SHOES.........LE54 2YZ
    ...THE SHOE SHOP........DN54 05Y
X102...THE SHOE SHOP........DN54 05Y

代码:

SELECT *
FROM mailing
WHERE postcode IS NOT NULL AND postcode <> '' AND
postcode IN (SELECT postcode FROM mailing group by postcode HAVING COUNT(postcode) > 1)
ORDER BY postcode;

曾尝试对帐号使用另一个计数器,但根本没有取回任何数据

您可以对 2 个条件使用 NOT EXISTSEXISTS

SELECT m.* FROM mailing m
WHERE
  NOT EXISTS (
    SELECT 1 FROM mailing
    WHERE acc = m.acc AND custname <> m.custname
  )
  AND
  EXISTS (
    SELECT 1 FROM mailing
    WHERE postcode = m.postcode and acc <> m.acc
  )

如果您只想邮政编码重复的记录,但前提是它们用于不同的帐号,则仅使用 EXISTS:

SELECT m.* FROM mailing m
WHERE
  EXISTS (
    SELECT 1 FROM mailing
    WHERE postcode = m.postcode and acc <> m.acc
  )