0

私はこのスレッドの質問から始めました: 複雑なクエリには SQL の達人が必要です

これで解決しました (SO のおかげです) が、もう少しデータを抽出する必要があります。

他の 2 つのテーブルを結合するクエリがあるとします。3 つのテーブルのそれぞれの条件により、結果セットに行が追加される可能性があります。何かのようなもの:

    SELECT a.*
    FROM tableA a
    LEFT JOIN tableB b on a.b_id = b.id
    LEFT JOIN tableC c on a.c_id = c.id
    WHERE a.creator_id = 5 OR b.is_active = 1 OR c.can_attend = 1

データが何であれ...基本的に私がする必要があるのは、結果セットの各行について、どの基準がそれを許可するかを決定することです。

この非常に単純化された例から、データを見るだけでよいと言えますが、テーブル b と c のデータが返されていないことに注意してください。また、結合によって行が結果セットに追加されるさまざまな方法があることに注意してください。 .

私が探しているのは、結果セットに行が追加されたときに値を挿入する方法、またはその効果をもたらす方法だと思います。上記のリンクされた質問で受け入れられた回答を見ると、より理にかなっています。

ご意見ありがとうございます。

4

1 に答える 1

1

これは、case ステートメントを使用して行うことができます。

SELECT a.*,
       (case when b.id is not null and c.id is not null then 'BOTH'
             when b.id is not null and c.id is null then 'B'
             when b.id is null and c.id is not null then 'C'
             else 'A'
        end) as WhereFrom
FROM tableA a
LEFT JOIN tableB b on a.b_id = b.id
LEFT JOIN tableC c on a.c_id = c.id
WHERE a.creator_id = 5 OR b.is_active = 1 OR c.can_attend = 1
于 2012-10-25T21:46:58.710 に答える