带有子查询的准备好的语句给出语法错误[关闭]

Posted

技术标签:

【中文标题】带有子查询的准备好的语句给出语法错误[关闭]【英文标题】:Prepared Statement with subquery Gives Syntax Errror [closed] 【发布时间】:2018-12-04 17:18:50 【问题描述】:
PreparedStatement amovie = con.prepareStatement("INSERT INTO actor_movie(actor_ID, movie_ID)"+ "select actor_ID from actor" + "where actor.surname = 'Depp', select movie_ID from movie where movie.title LIKE 'Caribbean%'");

谁能告诉我这个查询有什么问题?我挖了互联网,但找不到解决方案。

错误信息:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ', select movie_ID from movie where title LIKE 'Caribbean%'' at line 1

【问题讨论】:

selectwhere 之前需要空格 什么语法错误?请包含确切的信息。 当从多个部分创建查询时,请务必用空格将它们连接在一起。 【参考方案1】:

您有语法错误,因为您忘记了VALUES 并将SELECT 语句括在括号中。 改为:

PreparedStatement amovie = con.prepareStatement(
    "INSERT INTO actor_movie(actor_ID, movie_ID) VALUES ((select actor_ID from actor where actor.surname = 'Depp'), (select movie_ID from movie where movie.title LIKE 'Caribbean%'))");

【讨论】:

这次我得到这个错误:子查询返回超过 1 行 这是你的表,我不知道有多少行标题为 LIKE 'Caribbean%'。您必须确保只返回 1 行。我的回答是关于语法错误。 你是对的,我检查了,有多行。我使用触发器来防止重复项目,但我想它不起作用。谢谢回复。这解决了我的问题。【参考方案2】:

注意字符串连接之间所需的空格

...movie_ID)"+ "select ...

【讨论】:

还是同样的问题。 @forpas 是的,我做到了。 AFAIK,大多数 SQL 解析器不会关心此位置是否缺少空格,因为 ) 被识别为单独的标记。

以上是关于带有子查询的准备好的语句给出语法错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO准备语句给出“无效语法”错误[重复]

准备好的语句,结果集和查询问题[关闭]

简单的准备语句中的MySQL语法错误?

准备好的语句语法错误

带有 HashMap 的准备好的语句,异常

错误:语法错误:应为“)”,但在子查询中得到语句结束语句