'How to select non "unique" rows
I have the following table, from which i have to fetch non unique rows
| id | idA | infos |
|---|---|---|
| 0 | 201 | 1899 |
| 1 | 205 | 1955 |
| 2 | 207 | 1955 |
| 3 | 201 | 1959 |
I'd like fetch all the rows for the column infos, that have a same idA value in at least two rows.
Output of the query for the above table must be
infos
1899
1959
I've tried the following requests with no success :
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)
Solution 1:[1]
Try this:
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
The result for the data you posted:
idaA infos 201 1899 201 1959
Solution 2:[2]
Something like this should work:
SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1
Solution 3:[3]
SELECT id, idA, COUNT(infos) AS cnt
FROM mytable
GROUP BY infos
HAVING cnt > 1
Solution 4:[4]
This is probably what you are looking for:
SELECT *, COUNT(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1;
Solution 5:[5]
This should give all the rows where "infos" appear exactly once (Tested on MySQL)
SELECT id, idA, count(infos) AS cnt
FROM mytable
GROUP BY infos
HAVING cnt=1
Data
id ida infos
1 201 1955
2 202 1978
3 203 1978
4 204 1956
5 0 1980
Result
id idA cnt
1 201 1
4 204 1
5 0 1
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Mark Byers |
| Solution 2 | judda |
| Solution 3 | simhumileco |
| Solution 4 | simhumileco |
| Solution 5 |
