mysql将多行查询结果插入表中

时间:2012-01-17 16:01:17

标签: 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语句创建它,但是我得到一个“列数不匹配”这是有意义的(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行”错误。

任何想法如何使我的工作?

干杯

2 个答案:

答案 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;

如果将UID定义为auto_increment,则此方法有效。

答案 1 :(得分:1)

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

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