値が存在しない場合にのみ行を返します
P粉043470158
2023-08-24 22:07:48
<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>
完全を期すため (そして、それがより適切だと私は本当に信じています)、単純な
リーリーNOT EXISTS
を使用することをお勧めします。リーリー ###または:### リーリー
最初のバージョンはより直観的ですが、一般的には 2 番目のバージョンの方がパフォーマンスが向上すると思います (結合で使用される列にインデックスがあると仮定します)。
LEFT JOIN は最初のテーブルのすべての行に対して 1 行を返すため、2 番目のバージョンは機能します。
ON条件が成功すると、
INNER JOIN
と同様に、行には 2 番目のテーブルの列が含まれます。条件が失敗すると、返される行には 2 番目のテーブルのすべての列に対してNULL
が含まれます。WHERE l.id IS NULL
テストはこれらの行と一致するため、テーブル間で一致しない行が検索されます。