2016-08-21 62 views
1

我試圖顯示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) 

它給人的錯誤:

single-row subquery returns more than one row.

如何解決這個問題?

+0

將嵌套查詢放入「HAVING」子句 – PSD

回答

1

變化=IN

WHERE SM.STAFF_CODE IN (SELECT ...) 

因爲select返回多個值,使用等於將無法正常工作,但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語法。