2016-04-25 3 views
0

Я искал почти час, чтобы решить мою проблему, но я не могу найти что-либо.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'); 

Теперь я хочу, чтобы проверить эту таблицу для двойных записей в колонка «город», так что это будет Лондон и Париж, и я хочу сортировать его по sno и распечатать.

Я знаю, что это немного сложнее в Postgres, чем в MYSQL и я попытался это следующим образом:

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

Но я получаю пустой стол :(Я пробовал разные способы, но это всегда то же самое. , я не знаю, что делать, если честно. Надеюсь, некоторые из вас могут помочь мне здесь :).

Привет Макс

+0

быть также осторожным, чтобы проверить наличие различий в случае. LOndon - это не то же самое, что в Лондоне для postgresql. – StingyJack

ответ

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 
    ) 
Смежные вопросы