Удалить из таблицы SQL, используя пару соединений - PullRequest
0 голосов
/ 26 марта 2019

Есть 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" ; 

Добавление тега «user1» на картинке «pic_name2.png» в таблицу тегов:

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 ]

2 голосов
/ 26 марта 2019

попробуйте как ниже

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%'
)

2-й запрос

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

и третий запрос нужно изменить только там, где

WHERE Users.name ='user1' and Pictures.name= 'pic_name2.png'
0 голосов
/ 26 марта 2019

Вам не нужно объединять какие-либо таблицы для удаления строк:

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 на =, потому что это то, что вам нужно в данном случае.
Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...