2011-09-27 45 views
16

是否有這樣的查詢可能? MySQL給我一個語法錯誤。多次插入值與嵌套選擇...帶有多個嵌套SELECT的MySQL INSERT

INSERT INTO pv_indices_fields (index_id, veld_id) 
VALUES 
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val1'), 
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val2') 

回答

26

我剛剛測試了以下(它的工作原理):

insert into test (id1, id2) values (1, (select max(id) from test2)), (2, (select max(id) from test2));

我想這個問題我你沒有得到()你的選擇,因爲這個查詢不會沒有它的工作。

+0

確實是這個問題。它有多簡單...... – netiul

13

當你有一個這樣的子查詢,它必須返回一列一行只。如果你的子查詢只返回一行,那麼你需要在它們周圍使用括號,就像@ Thor84no注意到的那樣。

如果他們返回(或可能返回),比排多,試試這個來代替:

INSERT INTO pv_indices_fields (index_id, veld_id) 
    SELECT '1', id 
    FROM pv_fields 
    WHERE col1='76' 
    AND col2 IN ('val1', 'val2') 

,或者如果你的條件有很大的不同:

INSERT INTO pv_indices_fields (index_id, veld_id) 
    (SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val1') 
    UNION ALL 
    (SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val2') 
+2

謝謝!雖然問題確實遺漏了括號,但您的評論很有教育意義! – netiul