Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite:尝试使用别名删除时出错_Sql_Sqlite - Fatal编程技术网

SQLite:尝试使用别名删除时出错

SQLite:尝试使用别名删除时出错,sql,sqlite,Sql,Sqlite,在SQLite我的查询中: DELETE FROM notification_invoice t1 WHERE notificationDate >= 1536883200000 and providerId in ("1234","5678") AND EXISTS ( SELECT 1 FROM notification_invoice t2 WHERE providerId in ("1234","5678")

在SQLite我的查询中:

DELETE FROM notification_invoice t1 WHERE notificationDate >= 1536883200000  and providerId in ("1234","5678") 
    AND EXISTS (
         SELECT 1 FROM notification_invoice t2  WHERE 
         providerId in ("1234","5678") 
         and t2.notificationDate = t1.notificationDate          
         and t1.ownerKey = t2.ownerKey 
         AND t1._id < t2._id
    )    
DELETE语句在单个表上运行,不能使用表别名。别名导致了您的错误

请参阅以了解类似情况

DELETE语句在单个表上运行,不能使用表别名。别名导致了您的错误


请参阅以了解类似情况

删除要从中删除的表上的别名将修复语法错误

DELETE FROM notification_invoice
WHERE notificationDate >= 1536883200000
  AND providerId in ("1234","5678") 
  AND EXISTS (
         SELECT 1
           FROM notification_invoice t2
          WHERE t2.providerId in ("1234","5678") 
            AND t2.notificationDate = notification_invoice.notificationDate          
            AND t2.ownerKey         = notification_invoice.ownerKey 
            AND t2._id              > notification_invoice._id
    )
由于您没有描述要实现的数据或索引逻辑,因此无法判断逻辑是否正确


子查询可能应该有t2.providerId=notification\u invoice.provider\u id。在不知道数据、约束、预期逻辑等的情况下,我们无法判断。删除要删除的表上的别名将修复语法错误

DELETE FROM notification_invoice
WHERE notificationDate >= 1536883200000
  AND providerId in ("1234","5678") 
  AND EXISTS (
         SELECT 1
           FROM notification_invoice t2
          WHERE t2.providerId in ("1234","5678") 
            AND t2.notificationDate = notification_invoice.notificationDate          
            AND t2.ownerKey         = notification_invoice.ownerKey 
            AND t2._id              > notification_invoice._id
    )
由于您没有描述要实现的数据或索引逻辑,因此无法判断逻辑是否正确

可能子查询应该有t2.providerId=notification\u invoice.provider\u id。在不知道数据、约束、预期逻辑等的情况下,我们无法判断。Sqlite确实支持带DELETE的表别名,您只是使用了错误的语法。在表名和别名之间需要使用AS:

sqlite> CREATE TABLE foo(bar);
sqlite> INSERT INTO foo VALUES ('dog');
sqlite> SELECT * FROM foo;
bar       
----------
dog       
sqlite> DELETE FROM foo AS f WHERE f.bar = 'dog';
sqlite> SELECT * FROM foo;
sqlite> 
如果您查看中的语法图,特别是限定表名,您将看到AS不像在SELECT表名中那样是可选的。

Sqlite确实支持带DELETE的表别名,您只是使用了错误的语法。在表名和别名之间需要使用AS:

sqlite> CREATE TABLE foo(bar);
sqlite> INSERT INTO foo VALUES ('dog');
sqlite> SELECT * FROM foo;
bar       
----------
dog       
sqlite> DELETE FROM foo AS f WHERE f.bar = 'dog';
sqlite> SELECT * FROM foo;
sqlite> 


如果查看中的语法图,特别是限定表名,您将看到AS与SELECT表名中的AS不同,它不是可选的。

如果删除EXISTS条件,是否仍会出现错误?@jarlh yes,get same errorNow删除完整的WHERE子句。保持从通知中删除发票t1。有错误吗?注意,如果有效,您将删除所有数据,切勿在生产数据库上尝试此操作!从通知发票t1中删除从通知发票t2中选择1,其中….-获取相同的错误。如果删除EXISTS条件,是否仍会获取错误?@jarlh yes,获取相同的错误现在删除complete WHERE子句。保持从通知中删除发票t1。有错误吗?注意,如果有效,您将删除所有数据,切勿在生产数据库上尝试此操作!从通知发票t1中删除从通知发票t2中选择1,其中….-得到相同的错误。如果我没有使用别名t1-没有错误。但是查询返回的结果不正确。@Alexei-如果你对我们大喊大叫,你真的认为我们会帮助你吗!?!?!??!?!太好了,听起来你的问题得到了回答。错误的结果很可能是由于WHERE子句和EXISTS条件中的某些逻辑错误造成的。你必须自己解决这个问题。如果我不使用别名t1-没有错误。但是查询返回的结果不正确。@Alexei-如果你对我们大喊大叫,你真的认为我们会帮助你吗!?!?!??!?!太好了,听起来你的问题得到了回答。错误的结果很可能是由于WHERE子句和EXISTS条件中的某些逻辑错误造成的。您必须自己解决这个问题。无帮助:从通知中删除发票作为t1,其中通知日期…-错误:[SQLITE_Error]SQL错误或删除附近缺少数据库:语法错误SQLState:null错误代码:1@Alexei您使用的是哪个版本的sqlite?sqlite-jdbc-3.8.10.1。jar@Alexei这已经很旧了。这是最新版本吗:3.25.2?没有帮助:从通知中删除发票作为t1,其中通知日期…-错误:[SQLITE_Error]SQL错误或删除附近缺少数据库:语法错误SQLState:null错误代码:1@Alexei您使用的是哪个版本的sqlite?sqlite-jdbc-3.8.10.1。jar@Alexei这已经很旧了。这是最新版本吗:3.25.2?