我有一个错误说“子查询返回超过1行”

时间:2013-05-17 15:29:36

标签: sql subquery

String sqlStr = "SELECT *,"
              +"(SELECT group_concat(gGenre) FROM spmovy_genre_table a,spmovy_genre b WHERE mID=mID "
              +"AND a.gID=b.gID group by mID) Genre "
              +"FROM spmovy_movie where mTitle "
              + "like ?";

我有一个表格填充的电影标题由一个带有gID的外键Genre表连接,1。带有电影标题和mID的表格,然后是第二个带有mgID,mID,gID的表格,用于链接第三个带有gID和gGenre的表格< / p>

1 个答案:

答案 0 :(得分:1)

除了有关您的查询的一般评论(学习join语法并使用描述性别名)之外,您的查询问题就在于:

mID = mID

在不完全相关的子查询中。

你正试图获得一套类型。但查询为每个组返回一个。在select中的select中,您不能拥有多个值。

您打算将此子关联起来,但事实并非如此。你需要表别名。我猜这是正确的版本:

SELECT *,
       (SELECT group_concat(gGenre)
        FROM spmovy_genre_table a join
             spmovy_genre b
             on a.gID=b.gID
        WHERE spmovy_movie.mID=b.mID
       ) Genre
FROM spmovy_movie
where mTitle like ?

匹配可以是a.mID,而不是b.mID

我还删除了group by子句,因为不再需要它。