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

如何在SELECT中拼接两表列数据,相同值时仅保留一个?

解决多表查询中字段值相同仅显示单个、不同则拼接的需求

这个需求很常见,用SQL的条件判断逻辑就能轻松搞定!核心思路就是先检查两个字段的值是否完全一致,再决定返回单个值还是拼接后的结果。

核心实现逻辑

我们可以用CASE语句来做条件判断:

  • 当IM_FAKTUROR.FAKT_NUMMER和IM_FAKTURA_GRUPPER.FAKT_TYP的值完全相同时,只返回其中一个字段的值
  • 当两个值不同时,按你原来的逻辑拼接两个字段

针对不同数据库的示例代码

1. Oracle(你原语句用了||拼接,大概率是Oracle环境)

SELECT 
    CASE 
        -- 判断两个字段值是否相等
        WHEN IM_FAKTUROR.FAKT_NUMMER = IM_FAKTURA_GRUPPER.FAKT_TYP 
        THEN IM_FAKTUROR.FAKT_NUMMER -- 相等时返回单个值
        ELSE IM_FAKTUROR.FAKT_NUMMER || ' ' || IM_FAKTURA_GRUPPER.FAKT_TYP -- 不等时正常拼接
    END AS ProjektNrNamn
FROM 
    IM_FAKTUROR
-- 记得补充两张表的关联条件,比如:
JOIN IM_FAKTURA_GRUPPER ON IM_FAKTUROR.关联字段 = IM_FAKTURA_GRUPPER.关联字段;

2. MySQL/MariaDB(注意MySQL中||是逻辑或,要用CONCAT做拼接)

SELECT 
    CASE 
        WHEN IM_FAKTUROR.FAKT_NUMMER = IM_FAKTURA_GRUPPER.FAKT_TYP 
        THEN IM_FAKTUROR.FAKT_NUMMER
        ELSE CONCAT(IM_FAKTUROR.FAKT_NUMMER, ' ', IM_FAKTURA_GRUPPER.FAKT_TYP)
    END AS ProjektNrNamn
FROM 
    IM_FAKTUROR
JOIN IM_FAKTURA_GRUPPER ON IM_FAKTUROR.关联字段 = IM_FAKTURA_GRUPPER.关联字段;

额外处理:字段为NULL的情况

如果你的字段可能存在NULL值,直接判断相等会有问题(因为NULL = NULL在SQL中返回UNKNOWN),可以用空值处理函数统一处理:
以Oracle为例:

SELECT 
    CASE 
        WHEN NVL(IM_FAKTUROR.FAKT_NUMMER, '') = NVL(IM_FAKTURA_GRUPPER.FAKT_TYP, '') 
        THEN NVL(IM_FAKTUROR.FAKT_NUMMER, '')
        ELSE IM_FAKTUROR.FAKT_NUMMER || ' ' || IM_FAKTURA_GRUPPER.FAKT_TYP
    END AS ProjektNrNamn
FROM 
    IM_FAKTUROR
JOIN IM_FAKTURA_GRUPPER ON IM_FAKTUROR.关联字段 = IM_FAKTURA_GRUPPER.FAKT_TYP;

(MySQL中可以用IFNULL(字段, '')替代NVL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:54