【问题标题】:Does join happen with empty foreign key mysql空外键mysql是否加入
【发布时间】:2014-03-30 18:07:34
【问题描述】:

假设我有postspost_tagspost_categories 表。在帖子的页面上,我从 url 中获取 id,并且需要使用关联的表格找到帖子的信息。标签和类别是可选的,因此,有些帖子既没有标签,也没有类别。

Q1如果帖子在 post_tags 和 post_categories 表中没有匹配的行,与行是否存在相比,连接是否会“发生”,并且是否具有相同的资源使用情况?

Q2 如果发生连接,如果我进行第一次查询,获取帖子的类型,是否会更好,因为我可以检查它是否有标签和/或类别,那么可以选择进行连接查询还是只查找帖子的信息而不尝试连接到其他表? 我认为,虽然有一个查询并获取所有数据比进行多个查询更好,但也许第一个查询找出确切的类型,对于没有标签和/或帖子的帖子,它会减少数据库的负载。

posts 表大约有几百万行。

编辑

我正在左连接

表格结构

posts table
id, title, content

post_categories
id, post_id, category_id,

post_tags
id, post_id, tag_id,

categories
id, name

tags
id, name

谢谢

【问题讨论】:

  • Q1:哪个JOIN? SQL 中有不同类型的JOINQ2:取决于你想要什么。结论:请发布您的表格结构以及您的全部问题(即您要实现的目标),而不是过早地进行优化。

标签: mysql join


【解决方案1】:

我使用的 JOIN 有 2 种类型,涵盖所有场景:INNER JOINLEFT JOIN

  • INNER JOIN 要求 ON 验证为真,否则它会从结果中删除该行
  • LEFT JOIN 不需要 ON 验证为真,但会将失败表的列视为 NULL

在您的情况下,我很可能会使用 LEFT JOIN 并在标签等是否为 NULL 时采取相应措施。

FROM 表放在您知道会有行的地方。例如,不要使用FROM tags,因为所有内容都将基于可能并不总是存在的行。

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2010-09-23
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多