2012-02-24 72 views
0

首先,對於這個主題標題感到抱歉,我無法找到另一個更相關的,所以隨時修改它,如果你有什麼更好的想法。INSERT + SELECT:根據IN結果插入X條目

我的情況是,我有兩個表,一個與許多colums包括一列Value,第二個是由三列:

mysql> describe s_attrib; 
+-------------+-------------+------+ 
| Field  | Type  | Null | 
+-------------+-------------+------+ 
| Login  | varchar(32) | NO | 
| Type  | enum  | NO | 
| Value  | varchar(64) | NO | 
+-------------+-------------+------+ 
3 rows in set (0.00 sec) 

mysql> select * from s_attrib LIMIT 0,4; 

+----------+-----------+---------+ 
|Login  | Type  | Value | 
+----------+-----------+---------+ 
| login_1 | exception | value_1 | 
| login_1 | exception | value_2 | 
| login_2 | exception | value_3 | 
| login_3 | exception | value_4 | 
+--------------------------------+ 

在此表中,價值是獨一無二的。登錄可以有很多值,但是值不能超過登錄附加值。

我所做的檢索我需要插入特定登錄妮s_attrib表中的數值是:

mysql> SELECT DISTINCT Value FROM my_table WHERE SOME_BUSINESS_CONDITIONS_HERE; 
+---------+ 
| Value | 
+---------+ 
| value_5 | 
| value_6 | 
| value_7 | 
| value_8 | 
+---------+ 

我知道,那些值不存在在我的s_attrib表,所以深得在插入過程中不會有任何困難。

我想要做的,用一個單一的MySQL的請求是放入系統中插入值那樣的:

INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_5'); 
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_6'); 
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_7'); 
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_8'); 

有沒有辦法與使用INSERT INTO ... SELECT單個查詢做到這一點?

回答

1
INSERT INTO s_attrib 
SELECT DISTINCT 
    'MyLogin' AS `Login`, 
    'exception' AS `Type`, 
    Value AS `Value` 
FROM my_table 
WHERE SOME_BUSINESS_CONDITIONS_HERE; 
+0

像****一樣s。。謝謝,我嘗試了一些有點不同,但沒有奏效,但是這個人做了這個工作! – 2012-02-24 15:39:06