Как выбрать не «уникальные» строки - PullRequest
22 голосов
/ 23 декабря 2010

У меня есть следующая таблица, из которой я должен выбрать не уникальные строки

+------+------+------+
| 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)

Ответы [ 5 ]

36 голосов
/ 23 декабря 2010

Попробуйте это:

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
33 голосов
/ 23 декабря 2010

Примерно так должно работать:

SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1
6 голосов
/ 23 декабря 2010
SELECT id, idA, COUNT(infos) AS cnt
FROM mytable
GROUP BY infos
HAVING cnt > 1
2 голосов
/ 17 апреля 2013

Это, вероятно, то, что вы ищете:

SELECT *, COUNT(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1;
1 голос
/ 23 декабря 2010

Это должно дать все строки, где "информация" появляется ровно один раз (проверено на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...