我正在尝试为那些拿过一本书的人显示staff_code,staff_name和dept_name .
这是我的查询:
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)
它给出了错误:
单行子查询返回多行 .
怎么解决这个?
1 回答
将
=
更改为IN
:因为select返回多个值,所以使用equals将不起作用,但如果列表中的任何值匹配,
IN
将返回true . 该列表可以是硬编码的CSV列表,也可以是像您的查询一样的一列选择 .这将修复错误,但您还需要从表列表中删除
BOOK_TRANSACTIONS
并从选择列表中删除BOOK_CODE
.进行这些更改后,您的查询将如下所示:
我建议学习现代(现已超过25岁)的JOIN语法 .