同じ列に対する複数の WHERE 条件を使用した SELECTING
P粉384366923
2023-08-23 19:08:16
<p>わかりました。ここで明白で単純なことを見落としているかもしれません...しかし、同じ列の複数の条件に一致するレコードのみを返すクエリを作成する必要があります... </ p>
<p>私のテーブルは、ユーザーにフラグを適用するための非常に単純なリンク設定です...</p>
<pre class="brush:php;toolbar:false;">ID contactid flag flag_type
----------------------------------
118 99 ボランティア 1
119 99 アップロード 2
120 100 インポート経由 3
121 100 ボランティア 1
122 100 アップロード 2</pre>
<p>お待ちください...この場合、連絡先 99 と 100 が両方とも「ボランティア」および「アップロード済み」としてマークされていることがわかります...</p>
<p>必要なのは、検索フォームで入力された複数の条件に一致する連絡先 ID を返すことだけです...連絡先 ID は、選択されたすべてのフラグと一致する必要があります...私の頭の中では、SQL は次のようになります。 < ; /p>
</p>
<pre class="brush:php;toolbar:false;">連絡先 ID を選択
WHERE フラグ = 'ボランティア'
AND フラグ = 'アップロード済み'...</pre>
<p>しかし...何も返されません...ここで何が間違っているのでしょうか? </p>
###使用:### リーリー
重要なのは、
t.flagの数が
COUNT(DISTINCT t.flag)IN
句のパラメータの数と同じである必要があるということです。の使用は、contactid と flag の組み合わせに一意の制約がないことを防ぐためです。重複する可能性がない場合は、DISTINCT を省略できます。クエリ:
リーリー
を使用できます。 リーリーGROUP BY
とHAVING COUNT(*) = __
:(
contact_id、flag
が一意であると仮定します)。または接続を使用します:
リーリーフラグ リストが長く、一致するものが多数ある場合は、最初のフラグの方が速い可能性があります。フラグ リストが短く、一致するものがほとんどない場合は、2 番目のリストの方が速い場合があります。パフォーマンスが問題になる場合は、データでテストしてどれが最も効果的かを確認してください。