2012-09-25 71 views
1

我有兩個表存儲值爲VARCHAR
我正在填充表,我只想在其中一個表中插入值,如果它們不存在於其他表中。
喜歡的東西:mysql插入如果值不存在於另一個表

INSERT IF IS EMPTY(SELECT * FROM t1 where v='test') INTO t2 (v) VALUES ('test') 

我該怎麼辦呢?

回答

2

您需要使用某種類型的INSERT...SELECT查詢。

更新(後澄清):例如,這裏是如何插入一行在t2如果相應的行不存在在t1

INSERT INTO t2 (v) 
    SELECT temp.candidate 
    FROM (SELECT 'test' AS candidate) temp 
    LEFT JOIN t1 ON t1.v = temp.candidate 
    WHERE t1.v IS NULL 

要使用相同的查詢插入多行,恐怕沒有什麼比

INSERT INTO t2 (v) 
    SELECT temp.candidate 
    FROM (
     SELECT 'test1' AS candidate 
     UNION SELECT 'test2' 
     UNION SELECT 'test3' -- etc 
) temp 
    LEFT JOIN t1 ON t1.v = temp.candidate 
    WHERE t1.v IS NULL 

原來的答覆更好

例如,這將從table1的所有行中取出other_column滿足WHERE子句,並將行插入table2中,並將值用作column_name。它會忽略重複的鍵錯誤。

INSERT IGNORE INTO table2 (column_name) 
    SELECT table1.other_column 
    FROM table1 WHERE table1.something == 'filter'; 
+0

但是,這插入到table2中,並從table1中獲取值!雖然我想插入,如果該值不存在table1!請查看我的編輯問題,謝謝 – RYN

+0

@ 4r1y4n:如果table1中不存在該值,因爲您這樣說,並且它不存在於table2中,因爲我們試圖將它插入那裏,那麼* does *它存在? – Jon

+0

在SQL查詢本身(請參閱我的psudo查詢問題 - '測試'是值)!我只想插入一個表中的值,而不是兩個(t1異或t2) – RYN

-1
$result = mysql_query("SELECT * FROM t1 WHERE v='test'"); 
if(mysql_num_rows($result) == 0){ 
    mysql_query("INSERT INTO t2 (v) VALUES ('test')"); 
} 

沒去過用mysql了一段時間,所以這些功能已被棄用,但是這是我應該做的。

+0

這是PHP而不是純MySQL!當然這有效,但我想使用MySQL查詢 – RYN

+0

好吧,我的最後一句我的意思是使用PDO或MySQLi會更好。我看到我沒有得到你的問題,不幸的是不知道答案。抱歉! – yoeriboven

-1

有點貧民窟..但工程。假設你將一個靜態值插入'col'

INSERT INTO t1 (col) 
SELECT 'test' 
    FROM t2 
WHERE (SELECT count(*) FROM t2 WHERE v='test') = 0; 
2

對於插入多列,你可以試試這個。

INSERT INTO table_1 (column_id,column_2,column_3,column_4,column_5) 
SELECT 
    table_2.* 
FROM 
    table_2 
LEFT JOIN table_1 ON table_1.column_id = table_2.column_id 
WHERE 
    table_1.column_id IS NULL; 
相關問題