2014-02-07 2 views
0

사실 값 목록이 있는데 특정 테이블에 존재하지 않는 것을 알고 싶습니다.'IN'으로 레코드를 검색하고 테이블에 존재하지 않는 레코드를 표시하십시오.

표 '공'은 초록색과 빨간색의 값을가집니다. 등록 된 값을 반환하는

테 쿼리는 다음과 같습니다이 경우

Select * from ball where colors in ('green', 'red', 'blue', 'gray') 

나는 파란색과 회색이 반환 될 필요가있다.

빠른 편집 : 나는 5k + 결과를 이렇게 비교합니다.

답변

2

당신은 UNION 사용할 필요가 : 당신이있는 경우, 또는

SELECT colors FROM 
(select 'green'as colors 
    union 
    select 'red' 
    union 
    select 'blue' 
    union 
    select 'gray') all_colors 
WHERE NOT EXISTS (SELECT ball.colors FROM ball WHERE ball.colors = all_colors.colors) 

일부 테이블 (또는 하나를 만들 수 있습니다) 즉, 당신은 UNION을 건너 뛸 수 및 단지 것, 모든 색상을 포함 그 테이블을 사용하십시오.

+0

Nice! 5k + 값을 가지고 있기 때문에 더 쉬운 방법이 있습니까? –

+1

MySQL에는 없다. 나는 당신을 어떤 종류의 테이블에 그것들을 가져 오기를 강력하게 추천합니다 ... – PinnyM

+0

@ Dan-SP, 당신은 당신의 볼 테이블을 체크하기 위해 5k 컬러를 의미합니까? – Andrew

0

당신이 사용할 수있는 모든 공을 색상을 저장하는 테이블이 가정, 당신과 같이 그것을 할 수 있습니다 : 당신은 추가로 더 속도 일까지 각 테이블에 color 열에 대한 인덱스를 만들 수 있습니다

SELECT all_colors.color 
FROM all_colors LEFT JOIN balls ON balls.color = all_colors.color 
WHERE balls.color IS NULL 

.

왼쪽 외부 조인에 대한 일부 읽기 : http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join

+0

이 테이블에는 색이 없습니다. –

+0

일반적으로 'NOT EXISTS'는 상황에서 LEFT JOIN보다 더 잘 수행됩니다 이렇게. YMMV ... – PinnyM

+0

@PinnyM 글쎄, 그것은 엔진에 의존하는 것 같습니다. MySQL은 어쨌든 [이 답변] (http://stackoverflow.com/a/2246793/512334)에 따라 LEFT JOIN을 선호합니다. 그러나 나는 동의한다, YMMV. – Manny

관련 문제