SQLITE-删除具有自联接的行?

SQLITE-删除具有自联接的行?,sqlite,syntax,Sqlite,Syntax,我正在尝试删除一个简单表中除id最高的重复行外具有重复值的所有行 表: CREATE TABLE IF NOT EXISTS [Expression] ( [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [Value] VARCHAR(2048) NOT NULL ) 尝试的查询: DELETE Expressio

我正在尝试删除一个简单表中除id最高的重复行外具有重复值的所有行

表:

CREATE TABLE IF NOT EXISTS [Expression] (
                      [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
                      [Value] VARCHAR(2048) NOT NULL
                      )
尝试的查询:

DELETE Expression 
WHERE EXISTS (
    SELECT 1 
    FROM Expression Exp2 
    WHERE Expression.Value=Exp2.Value 
        AND Expression.Id < Exp2.Id)
失败于

SQL逻辑错误或表达式附近缺少数据库:语法错误

失败于

SQL逻辑错误或Exp1附近缺少数据库:语法错误

我需要使用什么语法?

不要忘记FROM

别忘了这封信


您可以通过多种方式实现这一点:

1使用CTE:


2使用临时表:相同的概念

您可以通过多种方式实现:

1使用CTE:


2使用临时表:相同的概念从联系人t1中删除t1内部连接联系人t2,其中t1.id 从联系人t1中删除t1内部连接联系人t2,其中t1.id 如果您的列具有主键,您如何能够拥有重复的数据?首先检查列的性质。【值】列中的数据是重复的,而不是整行中的数据。如果列有主键,怎么会有重复的数据?首先检查列的性质,[Value]列中的数据是重复的,而不是整行中的数据。非常接近,我得到的答案是:从表达式Exp1中删除存在的位置从表达式Exp2中选择1,其中Exp1.Value=Exp2.Value和Exp1.IdDELETE Exp1 FROM Expression Exp1 INNER JOIN Expression Exp2 ON Exp1.Value=Exp2.Value AND Exp1.Id < Exp2.Id
DELETE FROM Expression 
WHERE EXISTS (
    SELECT 1 
    FROM Expression Exp2 
    WHERE Expression.Value=Exp2.Value 
    AND Expression.Id < Exp2.Id
);
    WITH CTE AS (
    SELECT ID, VALUE, ROW_NUMBER() OVER(ORDER BY Value) as RowNum
    FROM Expression
     )
  DELETE 
   FROM CTE 
    WHERE ROWNum >1