2011-03-02 9 views
0

MySQL 하위 쿼리에서 머리를 긁적니다. 그리고 그것은 단지 2 시간 이상 긁어 낸 후에 제가 여기에 게시합니다. 그래서 여기있다 :
$ QUERY_1 및 $ query_2 일 :mysql 하위 쿼리 문제

$query_1 = "SELECT * 
       FROM table_new 
      WHERE table_new.NAME NOT IN ('text I know does not exist') "; 

$query_2 = "SELECT * 
       FROM table_new, 
        table_old 
      WHERE table_new.NAME = table_old.NAME "; 

$query_3 = "SELECT * 
       FROM table_new 
      WHERE table_new.NAME NOT IN (SELECT * 
              FROM table_new, 
               table_old 
              WHERE table_new.NAME = table_old.NAME) "; 

다음은 문제입니다. 하지만 $ query_3에서 조합하면 작동하지 않습니다.

의견이 있으십니까?

답변

3

사용 :

SELECT * 
    FROM table_new 
WHERE table_new.NAME NOT IN (SELECT table_old.NAME 
           FROM table_old) 

표준 SQL은 IN 절에서 열 비교 한 열 수 있습니다 - 그것은 열 값에 비교 될 수있는 명확하지 때문에 당신이 IN 절에 SELECT *을 사용할 수 없습니다를 외부 질의 그러나 MySQL은 튜플을 지원하는 유일한 솔루션입니다.

SELECT x.* 
    FROM TABLE_NEW x 
WHERE NOT EXISTS (SELECT NULL 
        FROM TABLE_OLD x 
        WHERE y.NAME = x.NAME) 

... 나 :

동등한 결과를 얻을 수있는 쿼리를 작성하는 다른 방법이있다

에 비해 열이 널 또는 경우 그 수행의 가장에 따라
SELECT x.* 
    FROM TABLE_NEW x 
LEFT JOIN TABLE_OLD y ON y.NAME = x.NAME 
    WHERE y.column_in_table_old IS NULL 

아니. For more info, see this page.

+0

첫 제안은 매력처럼 작동합니다. 감사! –