0

これらのリンクを調査しました:

単純な SQL のサブクエリによって複数の行が返される

SQL: エラー: 式として使用されたサブクエリによって複数の行が返されました

DatabaseError: 式として使用されるサブクエリによって複数の行が返されました (Django)

エラー: 式として使用されたサブクエリによって複数の行が返されました

「単一行のサブクエリが複数の行を返す」エラーの不明確性

...しかし、クエリ内でさまざまな種類のフィルタリングを使用しているように見えます。または、1 行が予期されるときに複数の行が返されるサブ選択があります。私のクエリはより単純であり、(私が知る限り) 1 行だけが返されることを期待すべきではありません。postgresql-9.1 を使用してビューからすべてを選択したいだけです。

# select * from MYVIEW;
ERROR:  more than one row returned by a subquery used as an expression

一方、これは機能します: # SELECT COUNT(*) FROM MYVIEW; count ------- 5 (1 row)

これが私のビューの一般的な定義です(以下は選択元を参照するためだけに提供されていることに注意してください。エラーを受け取っているわけではありません。エラーは、上記の「すべて選択」を実行したときにのみ受信されます) :

CREATE VIEW MYVIEW(ID1, ID2, ID3, KEY1, KEY2, ID4, TXT1, ID5, LOC1) AS 
SELECT 
    TABLE1.ID1, 
    (SELECT VALUE FROM TABLE2 WHERE TABLE3.TABLE3_ID = TABLE2.TABLE3_ID AND NAME = 'blah1' ) as ID2,
    (SELECT VALUE FROM TABLE2 WHERE TABLE3.TABLE3_ID = TABLE2.TABLE3_ID AND NAME = 'blah2' ) as ID3,
    (SELECT VALUE FROM TABLE2 WHERE TABLE3.TABLE3_ID = TABLE2.TABLE3_ID AND NAME = 'blah3') as KEY1,
    (SELECT VALUE FROM TABLE2 WHERE TABLE3.TABLE3_ID = TABLE2.TABLE3_ID AND NAME = 'blah4') as KEY2, 
    TABLE4.ID6,
    TABLE4.NAME,
    ID5,
    coalesce(
        (SELECT VALUE FROM TABLE5 WHERE TABLE5.ID5 = TABLE6.ID5 AND NAME = 'BLAH5'), 
        (SELECT VALUE FROM TABLE7 WHERE TABLE7.ID6 = TABLE6.ID6 AND NAME = 'BLAH5' )
    ) as LOC1 
FROM TABLE3, TABLE6, TABLE1, TABLE4, TABLE8 
WHERE 
    TABLE3.TABLE8_ID = TABLE8.TABLE8_ID AND 
    TABLE3.ID1 = TABLE1.ID1 AND 
    TABLE8.TABLE8_ID = TABLE4.TABLE8_ID AND 
    TABLE4.ID6 = TABLE6.ID6 AND 
    TABLE6.TABLE3_ID = TABLE3.TABLE3_ID and 
    TABLE8.NAME = 'BLAH6' and 
    TABLE8.on = true and 
    TABLE4.ON = true and 
    TABLE6.ON = true and 
    TABLE1.ON = true AND 
    TABLE3.ON = TRUE;
4

2 に答える 2

2

「サブクエリによって複数の行が返されました」というメッセージの原因は、ビュー内に重複したエントリがあったことです。ビューのソース テーブルから冗長なレコードが削除されると、エラーは発生しなくなりました。

于 2013-07-19T20:27:10.503 に答える
2

あなたが投稿したコードブロブを深く調べなくても、複数の列を選択しようとしているコードにネストされた SUB-SELECT ステートメントがあると思います。SUB-SELECT (クエリ内にネストされた SELECT) を使用すると、結果として 1 つの列のみを外部クエリに返すことができます。

于 2013-07-18T16:40:22.677 に答える