2017-10-20 9 views
1

この恐ろしいタイトルは残念です。 http://sqlfiddle.com/#!9/48d921/11つの条件を使用してより多くの条件を検索する「Exploratory」SQLクエリ

ここでは、「Bob」という名前のすべてのユーザーに対してクエリを実行しますが、「Bob」と同じ郵便番号のすべてのユーザーにも関心があります。タイプ "をボブとする。

私はこれを達成するために同じテーブルを2回結合したことがわかります。それに伴う問題は、規模が変わっていないことです。 select文をもっと扱いにくくするために、同じテーブルに加わらなければならない回数が増えるほど「探索」したい基準が多くなります。

ので:

  • は、これを行うための最善の方法は何ですか?
  • このタイプのクエリに名前がありますか?
+0

をチェックするレコードごとに一度だけのユーザーテーブルをスキャンし、私はあなたのSQLFiddleあなたはそれがないと言う何を考えていない - ここでの私の解釈です: '、uはa.user = u.id a1.postcode = a.postcode link.id = A1のユーザーリンクをJOINにアドレスA1をJOINにアドレスAをJOIN ユーザからlink.name をu.nameを選択 。ユーザー Wここではu.name = "Bob" とu.id!= link.id' –

+0

はい、選択された余分な条件が編集されていません。 –

+0

私は専門家ではありませんが、非リレーショナルデータベースでよりうまく処理されるようなクエリパターンのように思えます。私。それは私に "グラフィッ"と聞こえる。 –

答えて

1

SELECT 
FROM user 
where u.name="Bob" 
    OR (u.postcode in (SELECT a.postcode 
        FROM USER u 
        JOIN ADDRESS a on a.user=u.id 
        WHERE u.name="Bob") 
    ) 
    OR (u.type  in (SELECT ut.type 
        FROM USER u 
        JOIN USER_TYPE ut1 on u.id=ut1.user 
        WHERE u.name="Bob") 
    ) 

を更新答えですから、リンク基準

+0

このスケールは、郵便番号と同じレベルで同じ方法で動作する複数の「リンク」基準にどのように適用されますか? –

+0

質問が正しく理解できない場合があります。もう1つのクエリを作成してもう1つの "リンク"文字を追加できます – StanislavL

+0

私は別の基準を追加しました。 select文が混乱しているのが分かります。 –

関連する問題