23

自動インクリメントの主キーを持つテーブルがあります。

create table rt_table
(
  rtID int PRIMARY KEY AUTO_INCREMENT, 
  rt_user_id BIGINT,               /*user being retweeted*/
  rt_user_name varchar(70),        /*user name of rt_user_id*/
  source_user_id BIGINT,           /*user tweeting rt_user_id*/
  source_user_name varchar(70),    /*user name of source_user_id*/
  tweet_id BIGINT,                 /*fk to table tweets*/

  FOREIGN KEY (tweet_id) references tweets(tweet_id)
);

別のテーブルの一部からこのテーブルを作成したい:

insert into rt_table 
select rt_user_id, (select user_name from users u where u.user_id = t.rt_user_id),
       source_user_id, (select user_name from users u where u.user_id = t.source_user_id),
       tweet_id
  from tweets t
 where rt_user_id != -1;

列の数が一致しないというエラーが表示されます。これは、主キーが原因です (これは自動インクリメント値であるため、設定する必要はありません)。どうすればこれを回避できますか?

4

2 に答える 2

30

NULL挿入中に主キーを設定するだけです。

INSERT INTO rt_table 
SELECT 
  NULL,
  rt_user_id,
  (SELECT 
    user_name 
  FROM
    users u 
  WHERE u.user_id = t.rt_user_id),
  source_user_id,
  (SELECT 
    user_name 
  FROM
    users u 
  WHERE u.user_id = t.source_user_id),
  tweet_id 
FROM
  tweets t 
WHERE rt_user_id != - 1 ;
于 2014-04-07T16:15:39.467 に答える