数据表连接,左链接,判断多表为空时的操作GROUP_CONCAT
来源:互联网 发布:软件技术咨询合同 编辑:程序博客网 时间:2024/06/18 08:45
任务:遍历表mk_docrov_followup,当表中的某些字段为空时,判断与其相关联的:mk_docrov_lifestyle,mk_docrov_auxex,mk_docrov_medical_use,mk_docrov_referral这四张表中的所有字段,当所有字段均为空时,则unfinish++,只要这四张表中有一个字段不为空,则不能做unfinish++的操作。
一开始用死方法,if和for,最后发现在遍历表mk_docrov_followup之后至少还要做16次的if判断,太麻烦,所以探寻新大陆:
1 试着写表连接
select *
FROM
(
`mk_docrov_followup` mkdf //一对一的表
)
LEFT JOIN
`mk_docrov_lifestyle` mklifestyle
ON (mklifestyle.`mk_docrov_followup_id` = mkdf.`id`) //一对多的表
LEFT JOIN
`mk_docrov_auxex` mkauxex
ON (mkauxex.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_medical_use` mkmu
ON (mkmu.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_referral` mkreferral
ON (mkreferral.`mk_docrov_followup_id` = mkdf.`id`)
成功生成一张齐全的表格
2 把需要做判断的字段选择出来
select mkdf.inspection_id AS a,mkdf.symptom_code AS b,
mkdf.symptom_other AS c,mkdf.mk_docrov_medcom AS d,mkdf.mk_docrov_adr AS e,mkdf.mk_docrov_control AS f,
mkdf.mk_docrov_hypoglycemia AS g,
mklifestyle.mk_docrov_smoke AS h,mklifestyle.mk_docrov_alcohol AS i,
mklifestyle.mk_docrov_sport AS j,mklifestyle.mk_docrov_meal AS k,
mklifestyle.mk_docrov_psyre AS l,mklifestyle.mk_docrov_combe AS m,mklifestyle.mk_docrov_salt AS n,
mklifestyle.mk_docrov_diet AS o,
mkauxex.mk_docrov_blood AS p,mkauxex.mk_docrov_other AS q,
mkmu.mk_docrov_medical_name AS r,mkmu.mk_docrov_method AS s,
mkreferral.mk_docrov_referral_reason AS t, mkreferral.mk_docrov_org AS u
FROM
(
`mk_docrov_followup` mkdf
)
LEFT JOIN
`mk_docrov_lifestyle` mklifestyle
ON (mklifestyle.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_auxex` mkauxex
ON (mkauxex.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_medical_use` mkmu
ON (mkmu.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_referral` mkreferral
ON (mkreferral.`mk_docrov_followup_id` = mkdf.`id`)
实验成功后
需要做 字符串的拼接
select GROUP_CONCAT( // 字符拼接CONCAT
IFNULL(mkdf.inspection_id, ''),IFNULL(mkdf.symptom_code, ''), //因为每个字段都可能为空,所以要ifnull,否则会出错
IFNULL(mkdf.symptom_other, ''),IFNULL(mkdf.mk_docrov_medcom, ''),
IFNULL(mkdf.mk_docrov_adr, ''),IFNULL(mkdf.mk_docrov_control, ''),
IFNULL(mkdf.mk_docrov_hypoglycemia,''),
IFNULL(mklifestyle.mk_docrov_smoke, ''),
IFNULL(mklifestyle.mk_docrov_alcohol,'') ,
IFNULL(mklifestyle.mk_docrov_sport,''),
IFNULL(mklifestyle.mk_docrov_meal,''),
IFNULL(mklifestyle.mk_docrov_psyre,''),
IFNULL(mklifestyle.mk_docrov_combe,''),
IFNULL(mklifestyle.mk_docrov_salt,''),
IFNULL(mklifestyle.mk_docrov_diet, ''),
IFNULL(mkauxex.mk_docrov_blood, ''),
IFNULL(mkauxex.mk_docrov_other, ''),
IFNULL(mkmu.mk_docrov_medical_name, ''),
IFNULL(mkmu.mk_docrov_method, '') ,
IFNULL(mkreferral.mk_docrov_referral_reason, ''),
IFNULL(mkreferral.mk_docrov_org, '')
)AS followupstatstic
FROM
(
`mk_docrov_followup` mkdf
)
LEFT JOIN
`mk_docrov_lifestyle` mklifestyle
ON (mklifestyle.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_auxex` mkauxex
ON (mkauxex.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_medical_use` mkmu
ON (mkmu.`mk_docrov_followup_id` = mkdf.`id`)
LEFT JOIN
`mk_docrov_referral` mkreferral
ON (mkreferral.`mk_docrov_followup_id` = mkdf.`id`)
GROUP BY mkdf.id //主键,唯一标示的字符,id有几个,最终就会拼接出几个字符串。
- 数据表连接,左链接,判断多表为空时的操作GROUP_CONCAT
- 判断一个数据表是否为空
- 判断数据表中的数据为空
- hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
- SQL左连接判断空值
- 关于在Sqlite3中如何判断数据表返回的结果集是否为空的问题解决
- c# 文件操作 判断文件是否为空的方法
- C#操作EXCEL时,判断一个单元格是否为空的方式
- Guid为空的判断
- 字符串为空的判断
- 左链接,右连接
- 数据库为空时的安全操作
- 判断表是否为空?
- 两个数据表,左连接,右连接结果
- a链接为空时,页面跳动的解决办法
- C#读取Oracle中DATE类型的值,数据表中为空时,怎么去读?
- sql内链接,左连接,右链接和多表笛卡儿积
- MSSQL中 各种数据表连接的写法 [左连接,右连接......]
- 获取指定网站的访问信息
- 修改linux的默认jdk版本
- 单例的优缺点
- Android基础学习__第3天__SQLite与数据处理
- Lucene之MaxScorer算法简介
- 数据表连接,左链接,判断多表为空时的操作GROUP_CONCAT
- MFC 如何解决多个按钮响应一个函数的问题
- 显式处理事务
- poj 3250 bad hair day
- 延迟过程调用/异步过程调用APC
- SCJP考试指南(考试号310-065 中文)
- orcale常用函数之字符函数--------------orcale笔记
- Crontab导致Linux文件描述符枯竭问题
- 使用异步过程调用(APC)实现模块注入