2016-08-21 16 views
1

1冊の本を持っている人のためにstaff_code、staff_nameおよびdept_nameを表示しようとしています。ここでクエリは1行のクエリで複数の行を返します。

は私のクエリです:

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 ...) 

選択返すので、複数の値、等号を使用して動作しますが、リストの試合での値のいずれかの場合にtrueを返しINません。このリストには、ハードコードされたCSVリストを使用することも、クエリのような1列の選択を行うこともできます。

これでエラーは修正されますが、テーブルリストから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構文を学ぶお勧めします。

関連する問題