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

Oracle SQL查询:从关联表获取列值问题求助

解决多表关联获取公司名称的问题

嘿,刚接触SQL遇到这种多表关联的问题太正常了,别慌!我先帮你把表结构理清楚,然后一步步给你解决方案。

首先先明确你的三张表结构(我稍微规整了一下格式):

表结构

Table 1(主表)

ID* | Field 1 | Field 2
1   | ABC     | XYZ

Table 2(关联表,存储主表ID与供应商/客户的公司ID映射)

ID-FK (from Table1) | Company - Vendor | Company - Supplier
1                   | 3                | 2

*注意:Company - Vendor或Company - Supplier字段可能为NULL

Table 3(公司信息表)

Company ID | Company name
1          | Company A
2          | Company B
3          | Company C

你的需求

要得到这样的输出:

ID | Field 1 | Company - Vendor | Company - Supplier
1  | ABC     | Company C        | Company B

问题分析

你之前用内连接没成功,大概率是因为内连接(INNER JOIN)会过滤掉关联字段为NULL的行。如果Company - Vendor或Company - Supplier有NULL值,内连接会直接把这条主表数据排除掉,而我们需要的是即使某个公司ID为NULL,也要保留主表的数据,只是对应的公司名称显示NULL(或者自定义默认值)。

解决方案:使用左连接(LEFT JOIN)

我们需要把Table2的两个公司ID字段分别关联到Table3两次,给Table3起不同的别名来区分供应商和客户,同时用左连接来保留所有主表数据。

完整SQL语句如下:

SELECT
    t1.ID,
    t1."Field 1",
    v."Company name" AS "Company - Vendor",
    s."Company name" AS "Company - Supplier"
FROM
    "Table 1" t1
-- 先关联Table2,因为主表和关联表是一一对应的(根据你的示例)
JOIN
    "Table 2" t2 ON t1.ID = t2."ID-FK from table 1"
-- 左连接获取供应商名称,即使Vendor ID为NULL也保留数据
LEFT JOIN
    "Table 3" v ON t2."Company - Vendor" = v."Company ID"
-- 左连接获取客户名称,即使Supplier ID为NULL也保留数据
LEFT JOIN
    "Table 3" s ON t2."Company - Supplier" = s."Company ID"
-- 如果只需要特定ID的数据,加上WHERE条件
WHERE
    t1.ID = 1;

额外优化(可选)

如果想把NULL的公司名称替换成更友好的内容(比如“未指定”),可以用COALESCE函数:

SELECT
    t1.ID,
    t1."Field 1",
    COALESCE(v."Company name", '未指定') AS "Company - Vendor",
    COALESCE(s."Company name", '未指定') AS "Company - Supplier"
FROM
    "Table 1" t1
JOIN
    "Table 2" t2 ON t1.ID = t2."ID-FK from table 1"
LEFT JOIN
    "Table 3" v ON t2."Company - Vendor" = v."Company ID"
LEFT JOIN
    "Table 3" s ON t2."Company - Supplier" = s."Company ID"
WHERE
    t1.ID = 1;

这样就能完美得到你想要的结果啦!

内容的提问来源于stack exchange,提问作者Prasanth P J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:54