我在mysql查询上目不转睛。应该没那么难,我确实得到了结果,但不是我想要的结果。非常感谢你的帮助!
医生
dctr_id | dctr_name | ...
--------------------------
60 | Bezant
访问
vist_id | dctr_id| prsnl_id | visit_date | ...
-----------------------------------------------
1 | 60 | 86 | 2018-12-31
事故
acc_id | dctr_id | prsnl_id| acc_date | ...
--------------------------------------------
51 | 60 | 86 | 2018-12-25
55 | 60 | 86 | 2018-12-20
个人
prsnl_id | prsnl_name | ...
---------------------------
79 | test_name2
86 | test_name
我试过各种各样的查询,但没有一个能成功。不同,分组。。。
我得到这个结果:
dctr_id | dctr_name | visit_id | visit_date | acc_id | acc_date | prsnl_id | prsnl_name
-----------------------------------------------------------------------------------------
60 | Bezant | 1 | 2018-12-31 | 51 | 2018-12-25 | 79 | test_name2
60 | Bezant | 1 | 2018-12-31 | 51 | 2018-12-25 | 79 | test_name2
60 | Bezant | 1 | 2018-12-31 | 55 | 2018-12-20 | 86 | test_name1
SELECT DISTINCT dctr.dctr_id
, dctr.dctr_name
, vst.visit_id
, vst.visit_date
, acc.acc_id
, acc.acc_date,prsnl.prsnl_id
, prsnl.name
FROM doctor dctr
LEFT
JOIN visits vst
ON vst.dctr_id = dctr.dctr_id
LEFT
JOIN accidents acc
ON acc.dctr_id = dctr.dctr_id
LEFT
JOIN personell prsnl
ON prsnl.prsnl_id = vst.prsnl_id
OR prsnl.prsnl_id = acc.prsnl_id
WHERE dctr.dctr_id = 60
我想得到以下结果:
dctr_id | dctr_name | visit_id | visit_date | acc_id | acc_date | prsnl_id | prsnl_name
-----------------------------------------------------------------------------------------
60 | Bezant | 1 | 2018-12-31 | NULL | NULL | 79 | test_name2
60 | Bezant | NULL | NULL | 51 | 2018-12-25 | 79 | test_name2
60 | Bezant | NULL | NULL | 55 | 2018-12-20 | 86 | test_name1
2条答案
按热度按时间yxyvkwin1#
从中获取结果
visits
或者accidents
,你需要UNION
把那两张table放在一起NULL
表中没有相应数据的列的值(例如,acc_id
在visits
). 然后这些结果就可以JOIN
他被送到了医院doctor
以及personell
获取每次就诊/事故相关医生和人员信息的表格:输出:
sqlfiddle演示
vaj7vani2#
您需要两个带有union的sql查询。检查我的答案:
这是小提琴链接
另外,我在fiddle中使用了oracledb,但是sql使用了ansi语法。别担心。