有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";
请帮助我正确编写这些查询...
答案 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';
表users
和pictures
无法并且不需要联接。
您可以像这样插入新行:
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