2012-01-17 69 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,因为我要插入语句来创建它,但我得到一个“列数不匹配”这是有道理的(darn!)

做类似

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

会产生“子查询返回多于1行”的错误。

任何想法,我可以使这项工作?

干杯

+0

如果你运行子查询单独做他们只返回1记录? – Robert 2012-01-17 16:03:09

+0

@Robert。不,我可以有多个记录 – 2012-01-17 16:04:39

回答

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; 

如果UID被定义为auto_increment这将工作。

+0

只是删除值,就是这样?! – 2012-01-17 16:07:18

1

如果您希望INSERT创建UID值,则必须将UID定义为auto-incrementing column

CREATE TABLE `documentcounters` (
    `UID` INT NOT NULL AUTO_INCREMENT, 
    ...