带有子查询的准备好的语句给出语法错误[关闭]
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
【问题讨论】:
select
和 where
之前需要空格
什么语法错误?请包含确切的信息。
当从多个部分创建查询时,请务必用空格将它们连接在一起。
【参考方案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 解析器不会关心此位置是否缺少空格,因为)
被识别为单独的标记。以上是关于带有子查询的准备好的语句给出语法错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章