2016-04-12 26 views
0

私はすべてのレコードを返すSQLコマンドを書き込もうとしていますが、nameageおよびcityの列は同じテーブルに同じ値を持っています。複数の同じ列の値を持つ行を選択する

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

これを試してください。これにより、複数の値を持つ3つの列だけでなく、すべての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 
関連する問題