首页 / MYSQL / mysql – 基于列合并表
mysql – 基于列合并表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 基于列合并表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2171字,纯文字阅读大概需要4分钟。
内容图文
我试图基于roles.ref_type列将三个表合并为一个. roles.ref_type列具有值A(表示员工表)和B(表示组织表).
roles
role_id role_type company ref_id
1 A X 1
2 B Y 4
3 A Z 2
4 B X 5
employee (A)
employee_id employee_name joining_date
1 Einstein 24/01/1998
2 Maxwell 16/03/2002
3 Graham 23/05/2006
4 Boltz 06/02/2008
organisations (B)
org_id org_name org_max org_location
1 Stackoverflow 300 NY
2 StackExchange 45 OR
3 Facebook 300 NY
4 Google 45 OR
5 Yahoo 300 NY
6 Rediff 45 OR
预期结果:
role_id role_type company ref_id ref_name ref_joining_date ref_org_max
1 A X 1 Einstein 24/01/1998 NULL
2 B Y 4 Stackexchange NULL 45
3 A Z 2 Maxwell 16/03/2002 NULL
4 B X 5 Yahoo NULL 300
我尝试了以下查询:
SELECT t1.role_id, t1.role_type, t1.company, t1.ref_id,
CASE t1.role_type
WHEN "A"
THEN (
SELECT
t2.employee_name as ref_name,
t2.joining_date as ref_joining_date,
NULL as ref_org_max
FROM
employee t2
)
WHEN "B"
THEN (
SELECT
t3.org_name as ref_name,
NULL as ref_joining_date,
t3.org_max as ref_org_max
FROM
organisations t3
)
END
FROM roles t1
这不起作用,因为我知道上面的查询无效,但我正在寻找类似的查询来获得结果.
解决方法:
您需要使用LEFT OUTER JOIN而不是CASE语句
试试这个
SELECT t1.role_id,
t1.role_type,
t1.company,
t1.ref_id,
COALESCE(e.employee_name, o.org_id) AS ref_name,
e.joining_date AS ref_joining_date,
o.org_max AS ref_org_max
FROM roles t1
LEFT JOIN employee
ON e.employee_id = t1.ref_id
AND t1.role_type = 'A'
LEFT JOIN organisations o
ON o.org_id = t1.ref_id
AND t1.role_type = 'B'
内容总结
以上是互联网集市为您收集整理的mysql – 基于列合并表全部内容,希望文章能够帮你解决mysql – 基于列合并表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。