2010-12-23 7 views
21

을 선택하는 방법 나는 내가 동일이 아닌 고유 한 행비 "독특한"행

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

어떤 데이터베이스를 사용하고 있으며, 해당 데이터베이스의 버전 당신이 사용하고 있습니까? –

+0

가능한 [열 값이 다른 모든 행을 선택하는 방법] (http://stackoverflow.com/questions/13146304/how-to-select-every-row-where-column-value-is-not- 별개) –

+0

그것은 MySQL에서 작동하므로 해당 태그를 추가합니다. 나는 OP가 올바른 SQL dialect/version으로 바꿀 수 있을지 궁금해합니다. – icedwater

답변

35

을이 시도 :

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

잘 작동합니다! – AdrienG

1

이를 "infos"가 정확히 한 번 나타나는 모든 행을 제공해야합니다 (Teste MySQL을 D)

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

이것은 모든 데이터베이스에서 작동하지 않으며 MySQL에서는 작동하지만 MSSQL 서버에서는 작동하지 않습니다 (후자는 select에서 그룹에없는 집계되지 않은 열을 허용하지 않습니다) –

+0

동의합니다. 대답에 MySQL을 지정하도록 편집했습니다. 감사. –

31

뭔가 작업을해야합니다 :

SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1 
4
SELECT id, idA, count(infos) AS cnt 
FROM mytable 
GROUP BY infos 
HAVING cnt>1 
1

이것은 아마도 :

SELECT *, count(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1; 
+0

"적어도 2 행에 동일한 idA 값을 가진 열 정보 용 행을 모두 가져와야합니다."와 일치하지 않습니다. – FreeLightman