gpt4 book ai didi

mysql - mysql 查询出现异常错误 "delete"

转载 作者:行者123 更新时间:2023-11-29 22:15:29 25 4
gpt4 key购买 nike

我有以下在 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

当从 mysql 命令行运行删除查询时,我没有任何问题 - 它运行正常。

但是,当在 bash 脚本中运行它时,我收到以下错误:

ERROR 1064 (42000) at line 4: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE subscriberid NOT IN
(SELECT subscriberid FROM list_subscribers)) AS c)' at line 3
ssh exited with exit code 1

我花了几个小时尝试各种变体 - 我似乎无法解决它。任何帮助将不胜感激 - 我可能错过了一些明显的东西。

最佳答案

尝试删除反引号字符

   FROM `list_subscriber_events` WHERE
^ ^

在 shell 命令行的上下文中,这些反引号表示需要运行的内容,并且其返回值将被替换。

我怀疑 shell 正在解释这些反引号,并尝试执行 list_subscriber_events,这可能会返回错误。结果是它被替换为空字符串...结果语句是

 ... FROM WHERE ...

如果必须包含反引号,则在反引号前面添加反斜杠字符可能会将其转义。

跟进

在完全不同的情况下,似乎您有更多必要的内联 View 。如果子查询返回 NULL 值,则 NOT IN 可能会出现“陷阱”。 (也许您可以保证 list_subscribers 中的 subscriberid 不为 NULL。或者,也许您确实希望子查询返回 NULL 值时我们得到的行为。)

看起来是一个更简单的查询,使用反连接模式将完成您似乎想要的结果...从 list_subscriber_events 中删除 subscriberid 中的行> 值未出现在 list_subscribers

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

关于mysql - mysql 查询出现异常错误 "delete",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com