次の構造を使用して、この1:nの関係で複数の条件を考慮してrequest
のサブセットを選択するにはどうすればよいですか?表2のための左の結合で複数の値を選択
# Table 1: Request
uid
name
# Table 2: Additional Information
uid
type
value
request
注:type
は何でも、すなわち 'PRODUCT_NAME' または '評価' にすることができます。
私はちょうど私がこれを行うことができます与えられたproduct_name
で要求を選択したいと思います場合:
SELECT * FROM request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
WHERE i.type = 'product' AND i.value = 'Product Name'
私は与えられたproduct_name
で要求を選択したい場合は、私の文は次のように見なければならない何にこだわっていますAND rating
。私は単に別の参加を追加しようとしましたが、これは与えられた評価に関連するすべてのリクエストと同様に、product_name
に関連するすべてのリクエストを私に与えました。両方の条件を尊重する声明が必要です。
これは、前述したように、私にとっては機能しません。
SELECT * FROM request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
LEFT JOIN additional_information as a
ON r.uid = a.request
WHERE i.type = 'product' AND i.value = 'Product Name'
OR a.type = 'rating' AND a.value = 1
ヘルプを評価してください!
@TheF実際に返される列の名前を指定します。 – Strawberry
これは動作しますが、クエリは非常に遅く、50万未満のレコードで作業しています。クエリを最適化する方法はありますか? –
@ TheFは、テーブルの索引付けの程度によって異なります。あなたのテーブルの完全な定義をこの提案されたクエリと共に計画を説明してください。 – Rahul