如何在单个SQL查询中使用多个CONCAT并合并两段现有查询语句
两个含CONCAT函数的SQL查询合并方案
现有两段SQL的核心逻辑分别是预约表拼接时间戳、预约表关联患者表拼接患者全名,合并可以用以下两种方式实现:
方案1:直接合并写法(性能最优,推荐日常使用)
直接将两个CONCAT逻辑整合到同一主查询中,无需嵌套子查询:
SELECT a.*, CONCAT(a.schedule, ' ', a.starttime) AS `timestamp`, CONCAT(p.fname, ' ', p.lname) AS pname FROM tblappointment a INNER JOIN tblpatient p ON p.id = a.patient_id
方案2:子查询实现写法(符合子查询实现需求)
如果要求必须通过子查询实现,可以将第一段查询封装为内联子查询后再关联患者表:
SELECT appointment_with_time.*, CONCAT(p.fname, ' ', p.lname) AS pname FROM ( -- 子查询实现预约时间拼接逻辑 SELECT *, CONCAT(schedule, ' ', starttime) AS `timestamp` FROM tblappointment ) AS appointment_with_time INNER JOIN tblpatient p ON p.id = appointment_with_time.patient_id
- 两种写法返回结果完全一致,
timestamp为SQL保留关键字,代码中用反引号包裹避免语法报错 - 原写法中的隐式表连接(逗号分隔两张表)等价于INNER JOIN,修改为显式连接写法可读性更强,不易漏写关联条件
内容的提问来源于stack exchange,提问作者Rose Ann
相关产品推荐
相关产品推荐

