Sql 如何在新表中选择特定行?

Sql 如何在新表中选择特定行?,sql,sqlite,Sql,Sqlite,我正在使用SQLite 3。我有一个表MyTable,如下所示: Create table mytable (ID as INTEGER, OrderID as INTEGER); Insert into mytable (ID, OrderID) values (1, 1); Insert into mytable (ID, OrderID) values (1, 2); Insert into mytable (ID, OrderID) values (2, 1); Insert into

我正在使用SQLite 3。我有一个表MyTable,如下所示:

Create table mytable (ID as INTEGER, OrderID as INTEGER);

Insert into mytable (ID, OrderID) values (1, 1);
Insert into mytable (ID, OrderID) values (1, 2);
Insert into mytable (ID, OrderID) values (2, 1);
Insert into mytable (ID, OrderID) values (2, 3);
Insert into mytable (ID, OrderID) values (3, 1);
对于ID相同但OrderID不同的两行,如1,1和1,2,我们将它们称为重复行

现在我需要找出所有重复的行,并将它们放入一个名为MyDupTable的新表中。对于上述示例,MyDupTable应包含:

(1, 1);
(1, 2);
(2, 1);
(2, 3);
因此,我使用以下语句:

Select * into MyDupTable from MyTable group by ID having Count(ID) > 1;
但是sqlite给出了一个错误消息“接近”into,“语法错误”,为什么

谢谢,您可以通过使用子查询来完成,子查询将拾取所有重复的id,然后使用in从表中拾取其余列并将其插入到新表中

insert into MyDupTable 
select * from mytable where ID in(
    select ID from mytable
     group by ID
    having Count(*) > 1
    )
可以使用现有表创建表

CREATE TABLE MyDupTable AS 
   select * from mytable where ID in(
        select ID from mytable
         group by ID
        having Count(*) > 1
        )
您的查询分析

Select * into MyDupTable from MyTable group by ID having Count(ID) > 1;
1.您使用了group by id,但在MyTable中未找到任何选择列,选择中使用的列数必须在group by中使用

我会使用插入到。具有以下内容的语句存在:

注:

使用INSERT INTO语句时,始终限定所有列的名称。
似乎在调用此语句之前,MyDupTable必须存在。该语句不会自动创建MyDupTable,它只会将行放入现有表中。正确吗?@alancc但您可以通过使用CREATE TABLE作为选择表达式来实现这一点:
INSERT INTO MyDupTable (ID, orderid)
     SELECT ID, orderid
     FROM mytable mt
     WHERE EXISTS (SELECT 1 FROM mytable mt1 WHERE mt1.ID = mt.ID AND mt.orderid <> mt1.orderid);