2013-06-16 3 views

답변

2

당신이 NOT IN 경우 하위 쿼리 반환 당신이 IN 또는 EXISTS를 사용하여

SELECT value1 
    FROM table1 
WHERE value1 NOT IN 
(
    SELECT value1 
    FROM table2 
    WHERE value1 IS NOT NULL ... 
) 

조심 것을 할 수있는 외부 쿼리의 결과 집합을 제한하는 하위 쿼리를 사용하려는 가정 NULL의 당신은하지 않습니다 예상 결과를 얻습니다 (빈 결과 집합). 어느 하위 쿼리 (적절한 WHERE 절 또는 COALESCE 또는 IFNULL를 사용하여 어떤 값으로 NULLS 대체) NULL의를 반환하지 않습니다 있는지 확인하십시오 또는 여기 NOT EXISTS

SELECT value1 
    FROM table1 t 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM table2 
    WHERE value1 = t.value1 ... 
) 

SQLFiddle 데모입니다 사용합니다. 데모의 첫 번째 쿼리는 어떤 행도 반환하지 않습니다. 반면

당신은 이미 제안) 유일한 값

1을 반환 LIMIT 1를 사용하도록 하위 쿼리를 필요로하는 경우
2) 또는 적절한 집계 함수 (MIN(), MAX(), AVG() 등)

SELECT value1 
    FROM table1 
WHERE value1 <> 
(
    SELECT MAX(value1) 
    FROM table2 
    WHERE ... 
) 
2

내부 쿼리 끝에 "제한 1"을 넣으십시오. 이렇게하면 쿼리 엔진은 첫 번째 결과 만 반환합니다.

이면 하위 쿼리의 여러 결과와 비교하여 가치를 비교하려면 peterm의 솔루션을 사용하십시오.

2
SELECT value1 
FROM table1 
WHERE value1 != (
    SELECT value1 FROM table2 WHERE ... LIMIT 1 
) 

하지만 서브 쿼리가 필요한 것을 정확하게 반환하는지 확인하십시오. 때문에 multile 값을 반환하기 때문에 하나, 당신은 아마 일부 논리 오해가 있습니다. 또한

, 당신이없는 대신 하나의 동일한 여러 매개 변수, 당신은 NOT IN

SELECT value1 
FROM table1 
WHERE value1 NOT IN (
    SELECT value1 FROM table2 WHERE ... 
) 
를 사용하는 값 ​​1을해야하는 경우
관련 문제