2011-09-27 9 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