2011-04-07 74 views
10

我有兩個表,我的目標是將特定數據從第一個表移動到第二個表中,並說明爲什麼移動數據的原因。例如:在MySQL中使用INSERT ... SELECT添加額外的列值

raw_data_table 

SELECT * FROM raw_data_table where id IS NULL; 

我想這個移動到第二個表,這是除了一個額外的列reason等同於第一個表。我試過了:

INSERT INTO bad_data_table 
(SELECT * FROM raw_data_table WHERE id IS NULL), "The ID is NULL"; 

但是這會返回語法錯誤。如何複製整行並添加原因值?

回答

25
INSERT INTO bad_data_table 
SELECT *, 'The ID is NULL' AS Reason 
FROM raw_data_table 
WHERE id IS NULL; 
+7

我會考慮將'*'分成列名稱。否則,當有人向「Reason」表中添加新列時,事情就會開始爆炸。 – 2011-04-07 16:49:18

+0

這在預處理語句中不起作用 – 2015-03-02 04:52:06

0

如果該表中的所有數據都將爲空id,只需將原因列的默認值設置爲「ID爲NULL」即可。

OR

移動行後,執行新的表另一個查詢:

UPDATE bad_data_table SET reason="The ID is NULL" WHERE id is NULL; 
1

嘗試此查詢:

INSERT INTO bad_data_table VALUES (
(SELECT * FROM raw_data_table WHERE id IS NULL LIMIT 1), "The ID is NULL"); 

子查詢這裏需要有1行!

+0

錯誤 - '#1241 - 操作數應該包含1列(s) – 2017-04-26 11:40:07