2012-01-17 2 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

+0

@Robert. Нет, у меня может быть более одной записи –

ответ

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

просто удалить Ценности и все! –

1

Если вы хотите, чтобы INSERT создавал значения UID, то UID должен быть определен как auto-incrementing column.

CREATE TABLE `documentcounters` (
    `UID` INT NOT NULL AUTO_INCREMENT, 
    ... 
Смежные вопросы