我正在使用SQLite3。我有一个表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给出了一条错误消息“靠近”,语法错误”,为什么?
谢谢
答案 0 :(得分:1)
您可以使用sub-query
进行操作,子查询将选择所有重复的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中使用
答案 1 :(得分:0)
我会在INSERT INTO. . .
中使用EXISTS
语句:
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);
注意:
INSERT INTO
语句时,始终限定所有列名称。