Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
mysql中的异常错误“;删除“;查询_Mysql_Bash_Sql Delete - Fatal编程技术网

mysql中的异常错误“;删除“;查询

mysql中的异常错误“;删除“;查询,mysql,bash,sql-delete,Mysql,Bash,Sql Delete,我在shell脚本中运行了以下mysql代码: mysql -u "$DB_USER" -p"$DB_PASSWD" "$DB_SOURCE" << MYSQLEOF DELETE FROM list_subscriber_events WHERE subscriberid IN (SELECT subscriberid FROM (SELECT subscriberid FROM `list_subscriber_events` WHERE subscriberid NOT I

我在shell脚本中运行了以下mysql代码:

mysql  -u "$DB_USER" -p"$DB_PASSWD" "$DB_SOURCE" << MYSQLEOF

DELETE FROM list_subscriber_events WHERE subscriberid IN
(SELECT subscriberid FROM
(SELECT subscriberid FROM `list_subscriber_events` WHERE subscriberid NOT IN
(SELECT subscriberid FROM list_subscribers)) AS c);

MYSQLEOF

我花了几个小时尝试各种变化——我似乎无法解决它。任何帮助都将不胜感激-我可能遗漏了一些明显的内容。

尝试删除反勾字符

   FROM `list_subscriber_events` WHERE
        ^                      ^
在shell命令行的上下文中,这些反勾号表示需要运行的内容,并替换其中的返回

我怀疑shell正在解释这些回执,并试图执行
list\u subscriber\u events
,这可能会返回一个错误。结果是它被替换为一个空字符串。。。结果语句是

 ... FROM WHERE ...
如果必须包含反勾号,则可能在反勾号前面加上反斜杠字符将对其进行转义

跟进

另一方面,您似乎需要更多的内联视图。如果子查询返回空值,
不在
中,则可能会出现“gotcha”。(可能您保证
subscriberid
list\u subscribers
中不为NULL。或者,您确实希望我们在该子查询返回NULL值时得到的行为。)

看起来是一个简单得多的查询,使用反连接模式将实现您想要的结果。。。要从
list\u subscriber\u事件中删除
subscriberid
值未出现在
list\u subscriber\u事件中的行

  DELETE e.*
    FROM list_subscriber_events e
    LEFT
    JOIN list_subscribers l
      ON l.subscriberid = d.subscriberid
   WHERE l.subscriberid IS NULL

嗯,您的第二个SELECT subscriberid FROM语句上似乎有一个注释标记),这会影响到什么吗?我已经重试了,这就解决了-谢谢。我肯定我把它们脱下来测试过了!
  DELETE e.*
    FROM list_subscriber_events e
    LEFT
    JOIN list_subscribers l
      ON l.subscriberid = d.subscriberid
   WHERE l.subscriberid IS NULL