2012-02-24 9 views
0

まず、このトピックのタイトルで申し訳ありませんが、より関連性の高いものを見つけることができませんでした。INSERT + SELECT:INの結果に応じてXエントリを挿入する

私の場合は、私は2つのテーブル、1列Valueを含む多くのcolumsのものを持っているということであり、第二は、3つの列で構成されています。この表で

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テーブルNI特定のログインのために挿入する必要がある値を取得するために何をやったか

は次のとおりです。

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

私は、これらの値は、私のs_attribテーブルに存在しないことを知っているので、そこに勝ちました挿入中に何か衝突することはありません。

私は単一のMySQLのリクエストで、やろうとしている何がそのようなthoses値を挿入することです:INSERT INTO ... SELECTを使用して単一のクエリでそれを行う方法は

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'); 

ありますか?

答えて

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

****と同様に。ありがとう、私は何か別のものを試してみましたが動作しませんでしたが、これは仕事でした! –

関連する問題