【问题标题】:How to select unlink image and delete items from multiple tables?如何从多个表中选择取消链接图像并删除项目?
【发布时间】:2021-11-19 01:20:52
【问题描述】:

我正在尝试删除包含项目的类别。

我有 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 个帖子。

当我只搜索类别并发布时,它会显示全部。

【问题讨论】:

  • FROM categories, posts, images, comments, tags 我相信这是 MySQL 中的交叉连接
  • 不要这样写连接。使用正确的 join 语法和 on 标准来了解连接的关联方式。 where 应该是返回什么,而不是加入关系。

标签: mysql join mysql-8.0


【解决方案1】:

您正在使用 INNER JOIN,当您在所有 4 个表中找到相关记录时,您将获得结果。你需要使用 LEFT JOIN,类似这样:

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 相关的所有数据。

【讨论】:

  • 我应该使用表名作为别名,不需要加入dev.mysql.com/doc/refman/8.0/en/select.html无论如何谢谢。
  • 别名不是强制性的,如果您的连接条件包括具有相同名称的列,您可以使用别名(或直接使用点表示法的表名)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多