ホームページ  >  に質問  >  本文

値が存在しない場合にのみ行を返します

<p>テーブルが 2 つあります - <code>Booking</code>: </p> <pre class="brush:php;toolbar:false;">id | some_other_column ---- ------------------ 1 | 値 2|値 3 | 値 <p>2 番目のテーブル - <code>reservation_log</code>: </p> <pre class="brush:php;toolbar:false;">id |reservation_id |change_type -------------------------------------------------- 1 | 1 | 作成 2 | 2 | 作成 3 | 3 | 作成 4 | 1 | キャンセル 5 | 2 | キャンセル</pre> <p>キャンセルされていない予約 (この場合は ID 3 のみ) を選択するだけです。 単純な <code>WHEREchange_type = cancel</code> 条件を使用して「キャンセル」を簡単に選択できますが、単純な <code>WHERE</code> 条件では「キャンセルしない」を選択するのは困難です。ここでは効果がありません。 </p>
P粉043470158P粉043470158422日前334

全員に返信(2)返信します

  • P粉596161915

    P粉5961619152023-08-25 09:32:07

    完全を期すため (そして、それがより適切だと私は本当に信じています)、単純な NOT EXISTS を使用することをお勧めします。

    リーリー

    返事
    0
  • P粉692052513

    P粉6920525132023-08-25 00:35:13

    リーリー ###または:### リーリー

    最初のバージョンはより直観的ですが、一般的には 2 番目のバージョンの方がパフォーマンスが向上すると思います (結合で使用される列にインデックスがあると仮定します)。

    LEFT JOIN は最初のテーブルのすべての行に対して 1 行を返すため、2 番目のバージョンは機能します。

    ON

    条件が成功すると、INNER JOIN と同様に、行には 2 番目のテーブルの列が含まれます。条件が失敗すると、返される行には 2 番目のテーブルのすべての列に対して NULL が含まれます。 WHERE l.id IS NULL テストはこれらの行と一致するため、テーブル間で一致しない行が検索されます。

    返事
    0
  • キャンセル返事