0

テーブル:

exp_submissions
-----------------------------------------------------------------------------------
id | entry_id | member_id | member_group | category_id | type_id | portfolio_number
exp_judging
------------------------------------------------
id | rel_id | judge_id | pre | stage_1 | stage_2

狙い:

  • exp_judging.rel_id、および で2 つのテーブルを結合します。exp_submissions.id
  • 次の行のみを選択:
    • exp_submissions.member_group = 5exp_judging.pre = 1
    • judge_id != 1、 またjudge_id IS NULL
    • rel_id同じとを持つ既存の行はありませんjudge_id = 1

次のクエリは、最後の部分まですべてを実行します。

SELECT sub.entry_id 
FROM exp_judging AS jud
LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
WHERE (jud.judge_id != 1 OR jud.judge_id IS NULL)
AND jud.pre = 1
AND sub.member_group = 5
LIMIT 1

これらは、exp_judging テーブルにあるテスト行です。

ここに画像の説明を入力

rel_id = 35ご覧のとおり、 (ID 200 と 197)を持つ 2 つの行があります。上記のクエリは、行 ID 197 を選択していますが、同じ行がありrel_idjudge_id = 1. これは私の問題です。

rel_id同じandを持つ他の行が存在しないことを確認するためにクエリに追加する必要がありますが、judge_id = 1方法がわかりません。

ありがとうございました。

4

1 に答える 1

1

NOT EXISTS次の句を使用する必要があります。

   SELECT sub.entry_id 
     FROM exp_judging AS jud
LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
    WHERE (jud.judge_id != 1 OR jud.judge_id IS NULL)
      AND jud.pre = 1
      AND sub.member_group = 5
      AND NOT EXISTS (SELECT sub2.entry_id 
                        FROM exp_judging AS jud2
                   LEFT JOIN exp_submissions AS sub2 ON jud2.rel_id = sub2.id 
                       WHERE (jud2.judge_id = 1 )
                         AND jud2.pre = 1
                         AND sub2.member_group = 5
                         AND jud2.rel_id = jud.rel_id)
    LIMIT 1

編集:新しい条件を追加しました

于 2013-10-04T07:46:19.163 に答える