2012-01-17 5 views
2

다른 쿼리에서 얻은 데이터로 테이블을 "업그레이드"해야하는 시나리오가 나타났습니다. 누락 된 값을 추가하여 삽입해야 할 필요가 있지만 제대로 표시되지 않는 것 같습니다.mysql이 다중 행 쿼리 결과를 테이블에 삽입합니다.

대상 테이블은 다음

CREATE TABLE `documentcounters` (
    `UID` int, 
    `DataChar`, 
    `SeqNum` , 
    `LastSignature`, 
    `DocumentType`, 
    `SalesTerminal`, 
    `Active`, 
    PRIMARY KEY (`UID`) 
) ENGINE=InnoDB 

내가

INSERT INTO documentcounters 
SELECT Q1.in_headers, -1,NULL, 17,0,0 FROM 
    (SELECT DISTINCT(DocumentSeries) as in_headers FROM transactionsheaders)AS Q1 
    LEFT JOIN 
    (SELECT DISTINCT(DataChar) as in_counters FROM documentcounters)AS Q2 
ON Q1.in_headers=Q2.in_counters WHERE Q2.in_counters IS NULL; 
내가 삽입 문을 만들려면 때문에이 UID를 왼쪽

처럼 뭔가를 시도하고있다,하지만 난을 얻을 "열 수가 일치하지 않습니다"(의미가 맞음)

이런 식으로하는 것

INSERT INTO `documentcounters` 
(`DataChar`,`SeqNum`,`LastSignature`,`DocumentType`,`SalesTerminal`,`Active`) 
VALUES 
(
(SELECT Q1.in_headers FROM 
    (SELECT DISTINCT(DocumentSeries) as in_headers FROM transactionsheaders)AS Q1 
    LEFT JOIN 
    (SELECT DISTINCT(DataChar) as in_counters FROM documentcounters)AS Q2 
ON Q1.in_headers=Q2.in_counters WHERE Q2.in_counters IS NULL),-1,NULL,17,0,0 
); 

"Subquery returns than row"오류가 발생합니다.

어떻게하면이 아이디어를 만들 수 있습니까? UIDauto_increment로 정의 된 경우

건배

+0

하위 쿼리를 별도로 실행하는 경우 1 개의 레코드 만 반환합니까? – Robert

+0

@ 로버트. 아니요, 하나 이상의 레코드를 가질 수 있습니다. –

답변

2
INSERT INTO `documentcounters` 
(`DataChar`,`SeqNum`,`LastSignature`,`DocumentType`,`SalesTerminal`,`Active`) 
SELECT Q1.in_headers, -1,NULL, 17,0,0 FROM 
    (SELECT DISTINCT(DocumentSeries) as in_headers FROM transactionsheaders)AS Q1 
    LEFT JOIN 
    (SELECT DISTINCT(DataChar) as in_counters FROM documentcounters)AS Q2 
ON Q1.in_headers=Q2.in_counters WHERE Q2.in_counters IS NULL; 

이 작동합니다.

+0

값을 제거하면됩니다. –

관련 문제