0

MYSQL列の 2 つの値に基づいて重複した値を比較したいデータベースがあります。例えば

データベース

フィールド_ワン | field_two | field_three
------------------------------------
ああ | 123 | いいえ1
bbb | 456 | いいえ1
ああ | 123 | no2
ccc | 456 | no3
ああ | 123 | no3

これらの結果を返したい

フィールド_ワン | field_two | field_three
------------------------------------
ああ | 123 | いいえ1
ああ | 123 | no2

これはquery私が使用してきたものですが、目的の結果を得る方法がわかりません。ブラウザでを実行するqueryと、動かなくなります。phpMyAdmin私のデータベースも大きいです。

SELECT * FROM table_name WHERE field_three IN (SELECT field_one, field_two FROM table_name WHERE field_three IN ('no1', 'no2') HAVING COUNT(*) > 1)

ありがとう


解決した

WHERE@Gordon Linoffを から変更しましたquery

select t.*
from table_name t join
     (select field_one, field_two
      from table_name t
      group by field_one, field_two
      having count(*) = 2   -- or do you mean >= 2?
     ) tsum
     on t.field_one = tsum.field_one and t.field_two = tsum.field_two WHERE field3 IN ('no1', 'no2')
4

1 に答える 1

0

私はあなたがこれを望んでいると思います:

select t.*
from t join
     (select field_one, field_two
      from t
      group by field_one, field_two
      having count(*) = 2   -- or do you mean >= 2?
     ) tsum
     on t.field_one = tsum.field_one and t.field_two = tsum.field_two

サブクエリは、最初の 2 つの列に基づいて重複を見つけます。外側のクエリは元の行を返します。

別の値に関連する重複が必要な場合は、その条件をサブクエリに追加します。

select t.*
from t join
     (select field_one, field_two
      from t
      where field3 = 'no1' -- or whatever you want to set it to
      group by field_one, field_two
      having count(*) = 2   -- or do you mean >= 2?
     ) tsum
     on t.field_one = tsum.field_one and t.field_two = tsum.field_two
于 2013-04-19T20:36:09.860 に答える