2011-03-02 80 views
0

我正在摸索着我的腦子在MySQL子查詢上。它只是在抓了幾個小時之後才把它放在這裏。所以在這裏,它是: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_1和$ query_2工作。但是,當我將它們組合在$ 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

你的第一個建議就像一個魅力。謝謝! – 2011-03-02 02:19:48