このクエリを実行しようとすると、以下のエラーが表示されます。サブクエリが1より大きい値を返しましたSQLエラー
私がしようとしているのは、ユーザーIDがサプライヤ(from_user_id)に属していて、SUPPLIERの説明を表示していない場合は、CUSTOMERの説明を表示することです。
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
SELECT status_history.date,
status_history.doc_type,
status_history.document_id,
user.email,
doctypes.description,
orders.order_no
document_no,
(SELECT CASE
WHEN status_history.id = orders.from_id THEN
old_status.supplier_description
ELSE old_status.customer_description
END AS old_status_desc
FROM status_history
WHERE status_history.link_number = 821
AND status_history.id = user.id
AND status_history.doc_type =
doctypes.doc_type
AND status_history.old_status_id = old_status.status_id
AND status_history.new_status_id = new_status.status_id) AS
old_status_desc,
(SELECT CASE
WHEN status_history.id = orders.from_id THEN
new_status.supplier_description
ELSE new_status.customer_description
END AS new_status_desc
FROM status_history
WHERE status_history.link_number = 821
AND status_history.id = user.id
AND status_history.doc_type =
doctypes.doc_type
AND status_history.old_status_id = old_status.status_id
AND status_history.new_status_id = new_status.status_id) AS
new_status_desc
FROM status_history,
user,
doctypes,
qc_status old_status,
qc_status new_status,
orders
WHERE status_history.link_number = 821
AND status_history.id = user.id
AND status_history.doc_type = doctypes.doc_type
AND status_history.old_status_id = old_status.status_id
AND status_history.new_status_id = new_status.status_id
AND orders.quote_id = status_history.document_id
AND status_history.doc_type = 1
ORDER BY status_history.date,
status_history.doc_type
EDIT:このクエリの
結果を注文するための異なるステータスのモーダルを表示するために使用されます。つまり、「新規」→「保存済み」のような注文が表示されます。
私はサプライヤーとして2種類のユーザーを持っています。サプライヤーは、サプライヤーのステータス説明を見ることができ、その逆もあります。
例として、サプライヤとして注文のステータスを表示すると、Saved - > Sentが表示され、顧客として表示した場合はSaved - > Receivedと表示されます。
注文が作成されるたびに、SUPPLIERとCUSTOMERのレコードが1つずつ、status_historyテーブルにレコードが挿入されます。次に、order.from_user_idに対してユーザーIDを使用して、正しい記述を取得するユーザーのタイプを判別します。あなたはサブクエリを取り除き、代わりにこのようなCTE
を使用し得ることができます
エラーメッセージをクリアできませんでした。あなたが持っているそれらの 'CASE'サブクエリは、少なくともいくつかの例では、レコード以上のものを返しています。また、古い暗黙的な結合構文を使用しているため、クエリが何をしているのかをさらに見やすくすることができます。 –
@TimBiegeleisen私は 'CASE'サブクエリを使わずにこのクエリを実行する方法を試しています。単純に結合を使用することはできますが、条件もありますか?今質問を編集します。 –