0

この構造のテーブルがあります:

CREATE TABLE `jos_cpnllist` (
    `MSTMLSNO` int(7),
    `CLTIME` TIMESTAMP NULL,
    PRIMARY KEY (`MSTMLSNO`))
    ENGINE=MyISAM 
    SELECT * FROM jos_mls AS mls
        INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID
        INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM;

次に、このテーブルのデータを定期的に更新します。

INSERT INTO jos_cpnllist
    SELECT * FROM jos_mls AS mls
        INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID
        INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM;

追加されたタイムスタンプ列は、更新を行うときに問題を引き起こしています:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

の列を具体的にリストせずにこれを回避する方法はありSELECTますか? CLTIMEタイムスタンプ列を無視するように指示するには?

注: 75 列分のデータのようなものなので、それらすべてをリストすることは避けたいと思います。列はテーブルにMSTMLSNO既に存在するためjos_mls、エラーはスローされません。これCLTIMEは、大きな INNER JOIN ステートメントに存在しない唯一の列です。

4

1 に答える 1

3

挿入を使用する場合は、常に列を明示的に指定します。

INSERT INTO jos_cpnllist(MSTMLSNO, CLTIME)
    SELECT <columnX> as MSTMLSNO, <columnY> as CLTIME
    FROM jos_mls AS mls
        INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID
        INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM;

75 列をリストするのはそれほど難しくありません。からリストを取得しINFORMATION_SCHEMA.columns、Excel で書式設定できます。

于 2013-05-29T16:35:05.510 に答える