该查询使单行查询返回多行

时间:2016-08-21 13:05:29

标签: mysql

我正在尝试为那些已经拿过一本书的人显示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 个答案:

答案 0 :(得分:1)

=更改为IN

WHERE SM.STAFF_CODE IN (SELECT ...)

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

这样可以解决错误,但您还需要从表格列表中删除BOOK_TRANSACTIONS,然后从选择列表中删除BOOK_CODE

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

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岁)的JOIN语法。