Mysql語法(7)— 左外連接妙用(找到A表存在,B表不存在的數據)

背景:定時任務刪除庫中一些沒有消耗的廣告數據。目前是有兩張表:
A表:某個業務的送審記錄表(小表);
B表:全量的消耗記錄表(大表);

要刪除的數據:

  1. 在A表中且在B表中,但是B表的消耗小於某個值;
    或者
  2. 在A表中且沒有在B表中;

如果要滿足條件2,單純的使用mysql語法不太容易實現,我們可以利用左外鏈接的特性(左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值 )。來找到A表存在但是B表不存在的數據。

select 
  A.x_id
from 
  A 
LEFT JOIN B ON A.x_id=B.x_id
where B.cost <= 0 or B.x_id is null

較爲複雜的查詢:

select 
   A1.x_id
   from
   (select x_id from A where dt=xx group by x_id) A1
LEFT JOIN (select x_id from B where p_date in (xx,yy) group by x_id having sum(cost)>0)  B1
ON A1.x_id=B1.x_id
where B1.x_id is null
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章