Я пытаюсь получить дублированные значения в col1
для определенного значения col2
.
Предположим, у меня есть эта таблица:
+----+------------+----------+
| id | col1 | col2 |
+----+------------+----------+
| 1 | 5 | 2 |
| 2 | 5 | 1 |
| 3 | 8 | 4 |
| 4 | 8 | 1 |
| 5 | 8 | 3 |
| 6 | 5 | 2 |
| 7 | 2 | 3 |
| 8 | 1 | 4 |
| 9 | 2 | 2 |
| 10 | 5 | 2 |
| 11 | 5 | 3 |
| 12 | 3 | 1 |
+----+------------+----------+
Мой запрос должен вернуть эти строки, когда col2 = 1
:
+----+------------+----------+
| id | col1 | col2 |
+----+------------+----------+
| 1 | 5 | 2 |
| 6 | 5 | 2 |
| 10 | 5 | 2 |
| 11 | 5 | 3 |
| 3 | 8 | 4 |
| 5 | 8 | 3 |
+----+------------+----------+
Я пробовал этот запрос, и он довольно хорошо работает для меня:
SELECT
DISTINCT b.*
FROM table a,table b
WHERE a.col1 = b.col1 AND a.col2 = 1 AND b.col2 != 1
Как видите, DISTINCT
убивает огромную таблицу с записями по 100 тыс., И она ежедневно растет.
Мне нужны все значения, поэтому я не могу использовать предложение GROUP BY
.
В поисках лучшего и более быстрого решения. Если будет лучше, я могу изменить всю структуру.