MySql(Mariadb)“选择不存在”在sql文件中不起作用
我在mariadb终端中运行以下代码,它运行良好。一旦我把它放入一个.sql文件并运行它,我就会得到如下所示的错误。数据库设置正确,模式工作正常。我试图得到这样的输出:MySql(Mariadb)“选择不存在”在sql文件中不起作用,mysql,sql,mariadb,mysql-error-1064,Mysql,Sql,Mariadb,Mysql Error 1064,我在mariadb终端中运行以下代码,它运行良好。一旦我把它放入一个.sql文件并运行它,我就会得到如下所示的错误。数据库设置正确,模式工作正常。我试图得到这样的输出: +----------+ | ALCOHOL_FREE_COMPLIANT | +----------+ | 0 | +----------+ SELECT NOT EXISTS ( select market_postcode, truck_id, alcohol from (
+----------+
| ALCOHOL_FREE_COMPLIANT |
+----------+
| 0 |
+----------+
SELECT NOT EXISTS (
select market_postcode, truck_id, alcohol from (
SELECT * FROM buybeverage JOIN beverage
)AS beverageOrders
LEFT JOIN ChippOrder ON (chipporder.order_id = beverageOrders.order_id)
WHERE alcohol = 1 AND market_postcode = "E16AA"
) AS ALCOHOL_FREE_COMPLIANT;
第43行出现错误1064 42000:SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在“选择不存在”附近使用的正确语法
从中选择市场邮政编码、卡车id、酒精
“在第20行
…要在“选择”附近使用的正确语法不存在
语法错误报告错误后的文本。在本例中,SQL解析器希望看到的不是SELECT
我怀疑你没有用分号;在上面问题中显示的SQL查询之前终止SQL查询。例如:
SELECT blah blah FROM MyTable ORDER BY date
SELECT NOT EXISTS( ...
看到按日期排序后没有分号了吗?因此,第二个SELECT仍在被解析,就好像它是第一个查询的一部分一样。当然,你不能在一个完整的查询之后再进行一次选择
这就是解释如何读取语法错误的全部内容,因为您将来还会遇到这个问题。我们都有
这与使用“不存在”无关。@trincot的评论不正确。您已经编写了一个有效的SQL表达式。NOT EXISTS只是一个布尔表达式,您可以在选择后的选择列表中使用它。不过,这不是一种常见的模式
如何更好地解决此查询?我是这样写的:
SELECT COUNT(*) = 0 AS ALCOHOL_FREE_COMPLIANT
FROM buybeverage JOIN beverage
ON (...join condition, which you are missing...)
WHERE alcohol = 1 AND market_postcode = 'E16AA'
不需要子查询
无需选择任何列,因为您只需要知道是否有零行或多行符合条件
您需要buybeverage和beverage之间的连接条件,否则将生成一个连接条件
据我所知,没有必要加入ChippOrder。但是您没有显示足够的信息让我们知道哪个列属于哪个表。这确实是无效的SQL。select后面应该是表达式列表,而不是not exists,它属于where子句。where not exists可能更好。看这里:正确的方法是什么?非常感谢!现在有道理了