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
子句中