如何在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
相关产品推荐
相关产品推荐

