没有其他行使用关系时删除吗?

时间:2019-05-08 14:15:21

标签: mysql

我有一个用户表和一个图像表。

用户只有一张图片。

图像可以属于许多用户。

我正在努力做到这一点,以便在删除用户时删除其图像,但前提是没有其他用户在使用该图像。

我曾尝试在删除级联上使用,但是它只能与Im尝试实现的方式相反-当您删除图片时,用户将被删除。

Users:
id | name | image_id

Images:
id | url

2 个答案:

答案 0 :(得分:1)

您可以使用

查找未使用的图像
  select  i.id, i.url  
  from  images i 
  left join  users u  on u.image_id = i.id
  where  image_id is null 

并删除

delete  i.* 
from  images i  
inner join  (

      select  i.id
      from  images i 
      left join  users u  on u.image_id = i.id
      where  image_id is null 
) t on t.id  = i.id 

如果您遇到与select中所涉及的删除行有关的问题,则

delete  i.* 
from  images i  
inner join  ( 
  select  id 
  from ( 

      select  i.id
      from  images i 
      left join  users u  on u.image_id = i.id
      where  image_id is null  
  ) t1 
) t on t.id  = i.id 

答案 1 :(得分:0)

如果您可以使用单独的查询执行此清理操作,那么它将起作用

   DELETE FROM Images WHERE id NOT IN (SELECT image_id FROM Users);