2016-04-25 61 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 
    )