Как выбрать не "уникальные" строки
У меня есть следующая таблица, из которой я должен извлекать не уникальные строки
+------+------+------+
| id | idA |infos |
+----- +------+------+
| 0 | 201 | 1899 |
| 1 | 205 | 1955 |
| 2 | 207 | 1955 |
| 3 | 201 | 1959 |
+------+------+------+
Я хотел бы получить все строки для столбца infos
, которые имеют одинаковое значение idA
не менее двух строк.
Вывод запроса для указанной выше таблицы должен быть
infos
1899
1959
Я пробовал следующие запросы без успеха:
-
SELECT idA FROM XXX WHERE NOT EXISTS(SELECT * FROM XXX GROUP BY idA)
-
SELECT * FROM XXX a WHERE NOT EXISTS(SELECT * FROM XXX b WHERE a.RVT_ID=b.RVT_ID GROUP BY idA)
Ответы
Ответ 1
Попробуйте следующее:
SELECT T1.idA, T1.infos
FROM XXX T1
JOIN
(
SELECT idA
FROM XXX
GROUP BY idA
HAVING COUNT(*) >= 2
) T2
ON T1.idA = T2.idA
Результат для данных, которые вы опубликовали:
idaA infos
201 1899
201 1959
Ответ 2
Что-то вроде этого должно работать:
SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1
Ответ 3
SELECT id, idA, COUNT(infos) AS cnt
FROM mytable
GROUP BY infos
HAVING cnt > 1
Ответ 4
Это, вероятно, то, что вы ищете:
SELECT *, COUNT(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1;
Ответ 5
Это должно содержать все строки, где "информация" отображается ровно один раз (проверено на MySQL)
SELECT id, idA, count(infos) AS cnt
FROM mytable
GROUP BY infos
HAVING cnt=1
Данные
id ida infos
1 201 1955
2 202 1978
3 203 1978
4 204 1956
5 0 1980
Результат
id idA cnt
1 201 1
4 204 1
5 0 1