亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

只有當值不存在時才返回行

只有當值不存在時才返回行

拉丁的傳說 2019-06-01 13:48:51
只有當值不存在時才返回行我有兩張桌子-reservation:   id  | some_other_column   ----+------------------    1   | value   2   | value   3   | value第二張桌子-reservation_log:   id  | reservation_id | change_type   ----+----------------+-------------    1   | 1              | create    2   | 2              | create    3   | 3              | create    4   | 1              | cancel   5   | 2              | cancel我只需要選擇沒有取消的預訂(在本例中僅為ID 3)。我可以簡單地選擇取消WHERE change_type = cancel條件,但我掙扎著沒有取消,因為簡單WHERE在這里不管用。
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

SELECT *FROM reservationWHERE id NOT IN (select reservation_id                 FROM reservation_log                 
WHERE change_type = 'cancel')

或:

SELECT r.*FROM reservation rLEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'WHERE l.id IS NULL

第一個版本更直觀,但我認為第二個版本通常會獲得更好的性能(假設您對聯接中使用的列有索引)。

第二個版本之所以有效,是因為LEFT JOIN為第一個表中的所有行返回一行。當ON條件成功,這些行將包含來自第二個表的列,就像INNER JOIN..當條件失敗時,返回的行將包含NULL對于第二個表中的所有列。這個WHERE l.id IS NULL測試然后匹配這些行,以便查找表之間不匹配的所有行。


查看完整回答
反對 回復 2019-06-01
  • 2 回答
  • 0 關注
  • 539 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號