値が存在しない場合にのみ行を返します
P粉043470158
P粉043470158 2023-08-24 22:07:48
0
2
373
<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粉043470158
P粉043470158

全員に返信(2)
P粉596161915

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

リーリー
いいねを押す +0
P粉692052513

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

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

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

ON

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート