如何编写SQL从customer/contact表查询数据并标记来源表
SQL查询实现方案
实现该需求的核心逻辑是通过UNION ALL/UNION拼接两个表的查询结果,同时新增自定义字段标注数据来源,具体写法如下:
基础查询(仅返回姓名+来源标记)
假设customer表姓名字段为cust_name,contacts表姓名字段为contact_name,可直接使用以下语句:
SELECT cust_name AS 姓名, 'customer' AS 数据来源 FROM customer UNION ALL SELECT contact_name AS 姓名, 'contacts' AS 数据来源 FROM contacts;
说明
- 若不需要对合并后的结果去重,优先使用
UNION ALL,执行效率远高于会自动去重的UNION - 若两个表的姓名字段名完全一致,
AS 姓名的别名仅需在第一个SELECT语句中声明即可,后续查询会自动继承
关联活动数据表的扩展查询
如果需要和记录活动数据的表关联匹配活动信息,可将上述查询作为子查询,通过编号字段关联即可,示例如下:
SELECT t.姓名, t.数据来源, act.活动内容, act.活动时间 FROM 活动数据表 act INNER JOIN ( SELECT cust_id AS 关联编号, cust_name AS 姓名, 'customer' AS 数据来源 FROM customer UNION ALL SELECT contact_id AS 关联编号, contact_name AS 姓名, 'contacts' AS 数据来源 FROM contacts ) t ON act.关联编号 = t.关联编号;
内容的提问来源于stack exchange,提问作者Pedro Serra
相关产品推荐
相关产品推荐

