You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多表关联查询:无关联时返回NULL获取所有Inputs及其对应值

获取所有Inputs及其对应值(无关联时返回NULL)

要实现你需要的逻辑——获取所有inputs记录,同时返回对应的关联值(没有关联时返回NULL)——核心是使用LEFT JOIN(左连接),它会保留左表(这里是inputs)的所有行,即使右表没有匹配的记录。

假设表结构

先明确三张表的典型关联逻辑(如果你的字段名不同,直接对应替换即可):

  • inputs: 存储输入项定义,比如id(主键)、name(输入项名称,如name、job、city)
  • posts: 存储帖子主体,比如id(主键)
  • posts_values: 存储每个帖子的输入项值,比如post_id(关联posts.id)、input_id(关联inputs.id)、value(输入项的值)

针对单个帖子的查询

如果你需要查询某一个特定帖子的所有输入项及其对应值,使用下面的SQL:

SELECT
    i.name AS input,
    pv.value
FROM
    inputs i
LEFT JOIN
    posts_values pv 
    ON i.id = pv.input_id  -- 关联输入项和值表
    AND pv.post_id = 1;    -- 替换为你要查询的目标帖子ID

针对所有帖子的查询

如果需要获取所有帖子的每个输入项对应值,先通过CROSS JOIN生成所有帖子和输入项的组合,再左连接值表:

SELECT
    p.id AS post_id,
    i.name AS input,
    pv.value
FROM
    posts p
CROSS JOIN
    inputs i
LEFT JOIN
    posts_values pv
    ON p.id = pv.post_id
    AND i.id = pv.input_id
ORDER BY
    p.id, i.name;

逻辑解释

  • LEFT JOIN是核心:它会返回左表(inputs)的所有记录,当右表(posts_values)没有匹配的关联记录时,右表的字段(这里是value)会自动填充为NULL,完全符合你的需求。
  • 别用INNER JOIN:它只会返回两边都有匹配的记录,会直接丢失那些没有对应值的输入项。

示例结果

假设你查询post_id=1的帖子,且该帖子只填写了name和job的值,没有city的记录,查询结果会是:

inputvalue
nameDavid
jobDeveloper
cityNULL

这和你给出的示例格式完全一致。

内容的提问来源于stack exchange,提问作者Muhammad Wardany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:06:27