使用几个JOIN从SQL表中删除

时间:2019-03-26 09:43:25

标签: sql sqlite

有4个表:

Users: id,name
Albums: id,user_id
Pictures: id,picture_name,album_id
Tags: picture_id , user_id 

我需要编写2条命令: -删除图片名称的命令- 也就是说,将其从“标签”表和“图片”表中删除。 -将标签添加到用户图片的命令。

到目前为止,我已经尝试了这两个命令(似乎不起作用):

从标签表中删除:

DELETE FROM Tags
 JOIN Albums
 ON Users.id=Albums.user_id  
 JOIN PICTURES
 ON Pictures.album_id = Albums.id  
WHERE Pictures.name LIKE "pic_name.png" ; 

从图片表中删除:

DELETE FROM Pictures
WHERE Pictures.name LIKE "pic_name.png" ; 

将图片“ pic_name2.png”上的“ user1”标签添加到“标签”表中:

INSERT INTO Tags (user_id,picture_id) SELECT Users.id, Pictures.id FROM Albums JOIN Users ON Users.id=Albums.user_id  JOIN PICTURES ON Pictures.album_id = Albums.id  WHERE Users.name LIKE "user1" and Pictures.name= "pic_name2.png"; 

请帮助我正确编写这些查询...

2 个答案:

答案 0 :(得分:2)

尝试如下

delete from Tags
 where user_id in
( select user_id from Albums
  JOIN PICTURES
  ON PICTURES.album_id = Albums.id  
  WHERE Pictures.name LIKE '%pic_name.png%'
)

第二次查询

DELETE FROM Pictures
WHERE Pictures.name LIKE '%pic_name.png%'

和第三次查询只需要更改

WHERE Users.name ='user1' and Pictures.name= 'pic_name2.png'

答案 1 :(得分:0)

您无需连接任何表即可删除行:

delete from tags
where picture_id = (
  select id from pictures
  where picture_name = 'pic_name.png' 
);

delete from pictures
where picture_name = 'pic_name.png';

userspictures无法并且不需要联接。
您可以像这样插入新行:

insert into tags (user_id, picture_id) values
(
  (select id from users where name = 'user1'), 
  (select id from pictures where picture_name = 'pic_name2.png')
);

如您所见,我将所有like都更改为=,因为在这种情况下这就是您所需要的。
查看更多here