Postgresql检查双重条目

时间:2016-04-25 18:13:45

标签: sql postgresql

我搜索了近一个小时来解决我的问题,但我找不到任何东西。

所以:

我创建了一个名为s(供应商)的表格,其中列出了一些零件供应商,如下所示:

insert into S(sno, sname, status, city)
  values ('S1', 'Smith', 20, 'London'),
         ('S2', 'Jones', 10, 'Paris'),
         ('S3', 'Blake', 30, 'Paris'),
         ('S4', 'Clark', 20, 'London'),
         ('S5', 'Adams', 30, 'Athens');

现在我想在列表" city"中检查此表的双重条目,所以这将是伦敦和巴黎,我想通过sno对其进行排序并将其打印出来。

我知道Postgres比在mySQL中有点难,我试过这样:

SELECT sno, COUNT(city) AS NumOccurencies FROM s GROUP BY sno HAVING ( COUNT (city) > 1 );

但我得到的只是一张空桌子:(。我尝试了不同的方式,但它总是一样的,我不知道该怎么做才能说实话。我希望有些人可以帮助我在这里:)。

Greetings Max

1 个答案:

答案 0 :(得分:0)

你正在考虑它有点倒退。通过sno分组,您发现所有这些行都具有相同的sno,而不是city。试试这个:

SELECT
    city
FROM
    S
GROUP BY
    city
HAVING
    COUNT(*) > 1

然后,您可以将其用作子查询来查找所需的行:

SELECT
    sno, sname, status, city
FROM
    S
WHERE
    city IN
    (
        SELECT
            city
        FROM
            S
        GROUP BY
            city
        HAVING
            COUNT(*) > 1
    )