2016-06-21 25 views
1

我得到了一个“大”数据库(10M行),而且我需要删除无用的获取ID(它不再具有acquisition_id关系)。Mysql - 检查id是否存在于外部表中

收购

- id 
- date 

datapres

- id 
- value 
- atmo 
- #acquisition_id 

datatemps

- id 
- #acquisition_id 

个dataconds

- id 
- value 
- stack_num 
- #acquisition_id 

所以我需要选择那些3个表中的所有ID来获取withtout关系。是否可以直接在SQL中使用?

回答

1

是的,你可以使用多个LEFT JOIN S:

SELECT a.id 
FROM acquisitions a 
LEFT JOIN datapres dp 
ON(a.id = dp.acquisition_id) 
LEFT JOIN datatemps dt 
ON(a.id = dt.acquisition_id) 
LEFT JOIN dataconds dc 
ON(a.id = dc.acquisition_id) 
WHERE dp.id IS NULL OR 
     dt.id IS NULL OR 
     dc.id IS NULL 

这将带给您ID S中的缺失从3个数据表中的一个。

+0

我测试了第一次选择的acquisitions.id,但它并没有丢失,发现在datapres.acquisition_id – kesm0

+0

你想要它返回,如果它从** all **表丢失或只是**一** **? @ kesm0,现在只要一个就足够了,如果你想要所有的话,那么用'AND'来代替'OR' – sagi

+0

是的,我需要所有的桌子,完美的工作!谢谢 – kesm0