Поиск и отображение повторяющихся значений с помощью WHERE IN для сравнения двух значений

У меня есть база данных MYSQL, в которой я хотел бы сравнить повторяющиеся значения на основе двух значений в столбце. Например

База данных

field_one | field_two | field_three 
------------------------------------
aaa       | 123       | no1
bbb       | 456       | no1
aaa       | 123       | no2
ccc       | 456       | no3 
aaa       | 123       | no3

Я хотел бы вернуть эти результаты

field_one | field_two | field_three 
------------------------------------
aaa       | 123       | no1
aaa       | 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')

person Far    schedule 19.04.2013    source источник
comment
ваш внешний выбор не имеет смысла. Может быть, сформулируйте ваш вопрос не в sql? Также я предполагаю, что "product" - это field_three, и вы забыли его абстрагировать?   -  person gary schulte    schedule 20.04.2013


Ответы (1)


Я думаю, вы этого хотите:

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

Подзапрос находит дубликаты на основе первых двух столбцов. Внешний запрос возвращает исходные строки.

Если вам нужны дубликаты относительно другого значения, добавьте это условие в подзапрос:

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
person Gordon Linoff    schedule 19.04.2013
comment
Привет спасибо. Это вернет все дубликаты из всей базы данных. Я хотел бы возвращать только повторяющиеся значения на основе значения другого поля. Скажем, я хочу увидеть, где field_three значения no1 и no2 повторяются. Я надеюсь, что в этом есть смысл. - person Far; 22.04.2013
comment
Я попробовал второй код, но получаю сообщение об ошибке #1604 рядом с 'tsum on t.field_one = tsum.field_one and t.field_two = tsum.field_two. - person Far; 22.04.2013
comment
Неважно, я добавил имя таблицы перед tsum, однако запрос вообще ничего не возвращает. Я буду продолжать, еще раз спасибо. - person Far; 22.04.2013