2012-01-17 18 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; 
私はinsert文は、それを作成したいので、私は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 
); 

は、「サブクエリが1行以上を返します」というエラーが発生します。

どのように私はこの作品を作ることができますか?

乾杯

+0

サブクエリを個別に実行すると、1つのレコードのみが返されますか? @ Robert。 – 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; 

UIDauto_incrementとして定義されている場合、これは動作します。

+0

は値を削除して、それだけです! –

1

UIDの値を作成する場合は、UIDauto-incrementing columnと定義する必要があります。

CREATE TABLE `documentcounters` (
    `UID` INT NOT NULL AUTO_INCREMENT, 
    ... 
関連する問題