2016-04-12 81 views
0

我正在嘗試編寫一條SQL命令,該列返回給我的每條記錄,其中name,agecity列在同一個表中具有相同的值。選擇具有多個相等列值的行

id name age city 
1 John 22 London 
2 John 22 London 
3 Nancy 24 Tokyo 

我已經找到this question,似乎它就是我想要的東西,但不幸的是,當我運行下面的命令phpMyAdmin的開始加載沒有完成它,我得到了"Gateway Timeout error"所以我想我做錯了什麼。我不是一個SQL嚮導,所以如果有人能修復我的代碼,我會非常感激。

我並不完全瞭解完整的代碼,但我認爲tata2是一個代表我的表名的變量,但我對此主題不熟悉,所以任何幫助都會有用。

SELECT ta.name 
     ,ta.age 
     ,ta.city 

FROM mytablename ta 
WHERE (SELECT COUNT(*) 
     FROM mytable ta2 
     WHERE ta.name = ta2.name 
     AND ta.age =ta2.age 
     AND ta.city =ta2.city)>1 

回答

0

「TA」只是一個別名。它是不是一個變量。它只是簡單地讓你用簡寫形式引用表格,這樣你的查詢就更清晰了。

如果你只是想重複的值,那麼你可以用聚合函數和HAVING條款更容易做到這一點:

SELECT 
    TA.name, 
    TA.age, 
    TA.city 
FROM 
    MyTableName TA 
GROUP BY 
    TA.name, 
    TA.age, 
    TA.city 
HAVING 
    COUNT(*) > 1; 

我不知道爲什麼你的原始查詢超時(除也許你的表太大了,查詢無法及時返回),但我注意到你沒有語句終止符(PostgreSQL的分號)。幾年後我還沒有使用過PostgreSQL,所以我不記得是否需要這樣做,但我會加上它來確保。

0

試試看。這將允許您重新獲得所有ID,而不僅僅是具有多個值的三列。

SELECT x.* from mytablename x 
INNER JOIN (
      SELECT concat(y.name,'|',y.age,'|',y.city) as 'Fields' 
      FROM mytablename y 
      GROUP BY concat(y.name,'|',y.age,'|',y.city) 
      HAVING count(*) > 1 
     ) y on concat(x.name,'|',x.age,'|',x.city) = y.Fields