Geben Sie die Zeile nur zurück, wenn der Wert nicht vorhanden ist
P粉043470158
2023-08-24 22:07:48
<p>Ich habe 2 Tische - <code>Buchung</code>: </p>
<pre class="brush:php;toolbar:false;">id |
----+------------------
1 |. Wert
2|Wert
3 |. value</pre>
<p>Zweite Tabelle – <code>reservation_log</code>: </p>
<pre class="brush:php;toolbar:false;">id |
----+----------------+-------------
1 |. 1 |
2 |. 2 |
3 |. 3 |
4 |. 1 |
5 |. 2 |. Abbrechen</pre>
<p>Ich muss nur Reservierungen auswählen, die nicht storniert sind (in diesem Fall nur ID 3).
Ich kann „Abbrechen“ problemlos mit der einfachen Bedingung <code>WHERE change_type = cancel</code> auswählen, aber es fällt mir schwer, „Nicht abbrechen“ auszuwählen, da dies bei der einfachen Bedingung <code>WHERE</code> nicht der Fall ist Funktioniert hier nicht. </p>
为了完整起见(我真的相信它更适合),我鼓励您使用简单的
NOT EXISTS
。或者:
第一个版本更直观,但我认为第二个版本通常会获得更好的性能(假设您在联接中使用的列上有索引)。
第二个版本有效,因为 LEFT JOIN 为第一个表中的所有行返回一行。当
ON
条件成功时,这些行将包含第二个表中的列,就像INNER JOIN
一样。当条件失败时,返回的行将包含第二个表中所有列的NULL
。然后,WHERE l.id IS NULL
测试会匹配这些行,因此它会找到表之间不匹配的所有行。