Mysql 该查询提供单行查询并返回多行

Mysql 该查询提供单行查询并返回多行,mysql,Mysql,我试着向那些拿过一本书的人展示职员代码、职员姓名和部门名称 我的问题是: SELECT SM.STAFF_CODE,SM.STAFF_NAME,DM.DEPT_NAME,BT.BOOK_CODE FROM STAFF_MASTER SM,DEPARTMENT_MASTER DM,BOOK_TRANSACTIONS BT WHERE SM.DEPT_CODE =DM.DEPT_CODE AND SM.STAFF_CODE = ( SELECT STAFF_CODE FROM BOOK_T

我试着向那些拿过一本书的人展示职员代码、职员姓名和部门名称

我的问题是:

SELECT SM.STAFF_CODE,SM.STAFF_NAME,DM.DEPT_NAME,BT.BOOK_CODE
FROM STAFF_MASTER SM,DEPARTMENT_MASTER DM,BOOK_TRANSACTIONS BT 
WHERE SM.DEPT_CODE =DM.DEPT_CODE
AND SM.STAFF_CODE = (
  SELECT STAFF_CODE
  FROM BOOK_TRANSACTIONS
  HAVING COUNT(*) > 1
  GROUP BY STAFF_CODE)
它给出了错误:

单行子查询返回多行


如何解决此问题?

=
更改为
中的

WHERE SM.STAFF_CODE IN (SELECT ...)
因为select返回多个值,所以使用equals将不起作用,但是如果列表中的任何值匹配,则
中的
将返回true。该列表可以是硬编码的CSV列表,也可以是带有一列的select列表,就像您的查询一样

这将修复错误,但您还需要从表列表中删除
BOOK\u事务
,并从选择列表中删除
BOOK\u代码

进行这些更改后,您的查询将如下所示:

SELECT SM.STAFF_CODE,SM.STAFF_NAME,DM.DEPT_NAME
FROM STAFF_MASTER SM,DEPARTMENT_MASTER DM
WHERE SM.DEPT_CODE =DM.DEPT_CODE
AND SM.STAFF_CODE IN (
  SELECT STAFF_CODE
  FROM BOOK_TRANSACTIONS
  HAVING COUNT(*) > 1
  GROUP BY STAFF_CODE)

我建议学习现代(现在已经超过25岁)的连接语法。

将嵌套查询放入
HAVING
子句中