サブクエリが複数の行を返すネストされた MySQL クエリを作成しているため、クエリを実行できません。
誰でもこの問題の解決策を提案できますか?
前もって感謝します。
複数の値を返すサブクエリに関するエラーは、次のように単純な値の比較を試みていることを示しています。
WHERE col = (SELECT col2 FROM TABLE_2)
解決策は、サブクエリからのデータによって異なります。返されるすべての値をクエリで使用しますか? はいの場合は、IN の等号を変更します。
WHERE col IN (SELECT col2 FROM TABLE_2)
それ以外の場合は、1 つの値のみを返すようにサブクエリを修正する必要があります。MAX または MIN 集計関数は可能性があります。それらは最高値または最低値を返します。サブクエリを相関させるだけの問題かもしれません:
FROM TABLE_1 t1
WHERE t1.col = (SELECT MAX(t2.col2)
FROM TABLE_2 t2
WHERE t2.fk_col = t1.id) -- correlated example
Tabhaza が指摘しているように、サブクエリは通常、複数の列を返しません (一部のデータベースはタプル マッチングをサポートしていますが)。その場合、派生テーブル/インライン ビューを定義してそれに結合する必要があります。
あなたが抱えている問題についてもっと情報があればよかったのに...
サブクエリを実行するのではなく、派生テーブルに結合してみてください。複数のフィールドを返すことができます。
SELECT a.Field1, a.Field2, b.Field3, b.Field4
FROM table1 a INNER JOIN
(SELECT c.Field3, c.Field4, c.Key FROM table2 as c) as b ON a.Key = b.Key
WHERE ...
データベースが複数の行を返すと言っている場合は、データベースの言うことに耳を傾け、1 行だけを返すようにクエリを変更する必要があります。
これはあなたのロジックの問題です。
クエリを変更して、1 行のみを返すようにします。
クエリが複数の行を返す理由を考え、その結果から必要な 1 行だけをクエリが返すようにする方法を決定します。
これは、構文の問題ではなく、論理的な問題のように思えます。
サブクエリが複数の行を返すのはなぜですか?
1行しか必要としない場所になぜそれがあるのですか?
この 2 つを組み合わせるには、何かを再構築する必要があります。システム、クエリ、または意図の兆候がなければ、これ以上支援することは非常に困難です。
サブクエリで LIMIT 句を使用して、常に最大 1 行を返すようにする
LIMIT 1トップクエリが最初の結果のみを考慮するように、サブクエリに a を追加できます。LIMIT を実行する前にサブクエリの結果を並べ替えて、X が最大/最小の結果を返すこともできます。問題。