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

如何通过自连接或子查询实现同一列分两次展示不同结果?

解决方法

你的需求不需要复杂的自连接,直接通过条件判断就能实现:当部门名称包含&或'时,在dep2列显示该部门名,否则dep2留空。

最简实现SQL

SELECT 
    dep AS dep1,
    CASE 
        WHEN dep LIKE '%&%' OR dep LIKE "%'%" 
        THEN dep 
        ELSE NULL 
    END AS dep2
FROM test_deps;

原查询的问题分析

  1. 用INNER JOIN会强制两张表的id完全匹配,导致无法保留不满足条件的部门(比如Admissions)的dep1记录,内连接会直接过滤掉不匹配的行。
  2. WHERE子句的逻辑运算符优先级错误:AND优先级高于OR,导致实际执行逻辑和预期不符,筛选出的结果集混乱。

自连接实现方案(左连接版)

如果一定要用自连接,可以用左连接保留所有部门的dep1,仅将满足条件的部门匹配到dep2:

SELECT 
    h1.dep AS dep1,
    h2.dep AS dep2
FROM test_deps h1
LEFT JOIN test_deps h2 
    ON h1.id = h2.id 
    AND (h2.dep LIKE '%&%' OR h2.dep LIKE "%'%");

最终返回结果示例:

dep1dep2
AdmissionsNULL
CAPS - Dean's OfficeCAPS - Dean's Office
Parking & TransportationParking & Transportation

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:12:35