2015-10-26 154 views
-1

我有前兩個表比較:SQL插入值從其他2個表

表1

id code 
1 a 
2 b 
3 

表2

id code 
4 a 
5 b 
6 

表3

id id1 
1 4 
2 5 

我基本上想要插入表3,其中表1和表2的ID基於table1.name = table2.name

INSERT INTO table3(id,id1) 
      SELECT t1.id,t2.id FROM table1 t1, table2 t2 where t1.name=t2.name; 

但是表1和表2對第三排空代碼,我將如何比較作爲null = null不會工作。

幫助表示讚賞..

+0

它是'n​​ame'還是'code'? –

+1

我想你並沒有使用你的標籤中列出的每一個DBMS ...... –

回答

0

使用內部聯接

INSERT INTO table3(id,id1) SELECT t1.id, t2.id 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.name = t2.name OR (t1.name IS NULL AND t2.name IS NULL); 
1

只需添加一個(t1.name IS NULL AND t2.name IS NULL)測試:

INSERT INTO table3 (id, id1) 
SELECT t1.id, t2.id 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.name = t2.name OR (t1.name IS NULL AND t2.name IS NULL); 
+0

這種語法適用於所有帶標籤的DBMS :) – dnoeth

1

正如我前幾天瞭解到,MySQL支持語法增強<=>比較NULL等於:

INSERT INTO table3(id,id1) 
     SELECT t1.id,t2.id 
     FROM table1 t1 JOIN table2 t2 
     ON t1.name <=> t2.name; 

編輯:

MySQL reference

+0

哇,不知道,有趣:) [這裏是參考](https: //dev.mysql.com/doc/refman/5.0/en/comparison-operators.html) –

+0

@XLAnt:感謝您提供參考,並添加了它... – dnoeth

0

在Oracle中,使用NVL(),用於轉換空值到較少使用的字符。

INSERT INTO table3(id,id1) 
SELECT t1.id,t2.id 
FROM table1 t1, table2 t2 
WHERE nvl(t1.code,'$$')=nvl(t2.code,'$$'); 
+0

或者更好地使用'COALESCE'而不是'NVL'這是不是專有的,並支持所有DBMS(包括Oracle) – dnoeth

+0

@dnoeth我不知道'COALESCE'。謝謝你的建議。 –