Как выбрать несвязанное изображение и удалить элементы из нескольких таблиц?

#mysql #join #mysql-8.0

Вопрос:

Я пытаюсь удалить категорию с элементами в ней.

У меня есть 4 стола :

Категории

катИд

Публикации

post_id

Изображения

image_post_id

Теги

tag_post_id

Мой sql-запрос выглядит так для выбора и отмены ссылок на изображения :

 SELECT * FROM categories, posts, images, comments, tags 
WHERE catId = 25 
AND post_catId = catId 
AND image_post_id = post_id 
AND comment_post_id = post_id 
AND tag_cat_id = catId 
AND tag_post_id = post_id
 

но в нем не отображаются сообщения, в категории более 100 сообщений.

когда я ищу только по категориям и публикациям, он отображает все.

Комментарии:

1. FROM categories, posts, images, comments, tags Я считаю, что это перекрестное соединение в MySQL

2. Не пишите такие соединения. Используйте правильный join синтаксис с on критериями того, как связано соединение. То where должно быть для чего возвращаться, а не вступать в отношения.

Ответ №1:

Вы используете ВНУТРЕННЕЕ СОЕДИНЕНИЕ, с его помощью вы получите результаты, когда соответствующие записи будут найдены во всех 4 таблицах. Вам нужно использовать ЛЕВОЕ СОЕДИНЕНИЕ, аналогично этому:

 SELECT * FROM categories
 LEFT JOIN posts on post_catId = catId
 LEFT JOIN images ON image_post_id = post_id 
 LEFT JOIN comments ON comment_post_id = post_id 
 LEFT JOIN tags ON tag_cat_id = catId AND tag_post_id = post_id
  WHERE catId = 25;
 

Затем вы увидите все данные, относящиеся к вашему catid=25.

Комментарии:

1. Я должен использовать имя таблицы в качестве псевдонима, не нужно присоединяться dev.mysql.com/doc/refman/8.0/en/select.html в любом случае , спасибо.

2. Псевдоним НЕ является обязательным, вы можете использовать псевдоним (или имя таблицы непосредственно с точечной нотацией), если ваше условие объединения включает столбцы с одинаковыми именами.