僅當值不存在時回傳行
P粉043470158
2023-08-24 22:07:48
<p>我有 2 張桌子 - <code>預訂</code>:</p>
<pre class="brush:php;toolbar:false;">id | some_other_column
---- ------------------
1 | value
2 | value
3 | value</pre>
<p>第二個表 - <code>reservation_log</code>:</p>
<pre class="brush:php;toolbar:false;">id | reservation_id | change_type
---- ---------------- -------------
1 | 1 | create
2 | 2 | create
3 | 3 | create
4 | 1 | cancel
5 | 2 | cancel</pre>
<p>我只需要選擇未取消的預訂(本例中僅為 ID 3)。
我可以使用簡單的<code>WHERE change_type = cancel</code> 條件輕鬆選擇“取消”,但我很難選擇“不取消”,因為簡單的<code>WHERE</code> 在這裡不起作用。 </p >
為了完整起見(我真的相信它更適合),我鼓勵您使用簡單的
NOT EXISTS
。或:
第一個版本更直觀,但我認為第二個版本通常會獲得更好的效能(假設您在聯接中使用的列上有索引)。
第二個版本有效,因為 LEFT JOIN 會為第一個表中的所有行傳回一行。當
ON
條件成功時,這些行將包含第二個表中的列,就像INNER JOIN
一樣。當條件失敗時,傳回的行將包含第二個表中所有列的NULL
。然後,WHERE l.id IS NULL
測試會符合這些行,因此它會找到表之間不匹配的所有行。