0

我有一个名为 pat_authors 的表,有 2 列 - last_name, first_initials 我想选择两列的不同组合。以下命令用于检索正确的信息:

select distinct last_name, first_initials from pat_authors;

但是,我想检索相同的信息,然后将其插入另一个名为 unique_authors 的表中,其中 unique_authors 有 3 列 - authorID、last_name、first_initials。

我已经尝试了很多代码变体,我快疯了。以下是我认为最接近正确的两次尝试:

select distinct author_last_name, author_initials into uniqueauthors from pat_authors;

这给了我一个错误-1327:undeclared variable: uniqueauthors

我也试过

insert into uniqueauthors select distinct author_last_name, author_initials from pat_authors;

这给了我Error Code: 1136. Column count doesn't match value count at row 1.在这里我认为我会没事的,因为我的authorID专栏是NOT NULL AUTO_INCREMENT

4

2 回答 2

1

它不起作用的原因是该INSERT语句不知道从SELECT. 您需要明确指定要INSERT进入的列:

INSERT INTO uniqueauthors (last_name, first_initials)
SELECT DISTINCT author_last_name, author_initials
FROM pat_authors

或者,您可以隐含列规范。但是,如果这样做,则需要确保表定义中有相同数量的列(按匹配顺序),SELECT因为表定义中有列(甚至包括自动递增列)。你怎么还能让列自动递增?您可以简单地指定NULL为中的第一列SELECT

INSERT INTO uniqueauthors 
SELECT DISTINCT NULL, author_last_name, author_initials 
FROM pat_authors

有用的提示:每当您尝试将NULL值插入到自动递增的列中时,它只会插入自动递增的值。

于 2012-07-17T22:38:11.890 回答
0

如果您不使用所有列,则需要指定要使用的列

insert into uniqueauthors(last_name, first_initials) select distinct author_last_name, author_initials from pat_authors;

或者只是为所有列设置一个值

insert into uniqueauthors select null, author_last_name, author_initials from pat_authors GROUP BY author_last_name, author_initials;
于 2012-07-17T22:39:32.223 回答