Sql 左边的人在这里穿西装吗?

Sql 左边的人在这里穿西装吗?,sql,asp.net,Sql,Asp.net,这是我的桌子 表1:患者 表2:DMRelation 表3:医生 表4:药物 我想显示患者姓名以及医生姓名和cid=1的药物名称。医生是否给药应提交患者记录 查询 将条件放在on子句中可以执行您想要的操作: select p.Pname, d.dname, m.Drugname from DMRelation r inner join Patient p on p.id = r.pid inner join Doctor d on d.id = r.did

这是我的桌子

表1:患者 表2:DMRelation 表3:医生 表4:药物 我想显示患者姓名以及医生姓名和cid=1的药物名称。医生是否给药应提交患者记录

查询
将条件放在
on
子句中可以执行您想要的操作:

select p.Pname, d.dname, m.Drugname
from DMRelation r inner join
     Patient p
     on p.id = r.pid inner join
     Doctor d
     on d.id = r.did left join
     Medicine m
     on m.id = r.mid and m.id = 1
order by p.Pname, d.dname, m.Drugname;
这将返回医生向患者开出处方的医生和患者列表。如果医生开了有问题的药,那么名字就会出现。否则,它将为
NULL

如果您想要所有患者,那么您需要从
Patient
表开始,一直执行
left join

select p.Pname, d.dname, m.Drugname
from Patient p left join
     DMRelation r 
     on p.id = r.pid left join
     Doctor d
     on d.id = r.did left join
     Medicine m
     on m.id = r.mid and m.id = 1
order by p.Pname, d.dname, m.Drugname;

这将返回所有患者,并提供有关该药物的具体信息。

正如我所见,您的查询很好。您面临的问题是什么?为什么要将0放在外键列中?您的查询应该返回您描述的结果。这里的左连接正是您所需要的。我假设通过
cid
您的意思是
mid
。感谢您的朋友的回复。实际上我已经给出了示例表。实际上我想对大表应用相同的逻辑。如果逻辑正确,我将继续。这就是我问的原因。cid不等于mid。
id  |  dname
----+------------
1   |  Dr suhas
2   |  Dr Malini
id | drugname
---+----------
1  |   Drug1
2  |   Drug2
select Patient.Pname,Doctor.dname,Medicine.Drugname
from DMRelation
inner join Patient
on Patient.id = DMRelation.pid
inner join Doctor
on Doctor.id = DMRelation.did
left join Medicine
on Medicine.id = DMRelation.mid
order by Patient.Pname,Doctor.dname,Medicine.Drugname
select p.Pname, d.dname, m.Drugname
from DMRelation r inner join
     Patient p
     on p.id = r.pid inner join
     Doctor d
     on d.id = r.did left join
     Medicine m
     on m.id = r.mid and m.id = 1
order by p.Pname, d.dname, m.Drugname;
select p.Pname, d.dname, m.Drugname
from Patient p left join
     DMRelation r 
     on p.id = r.pid left join
     Doctor d
     on d.id = r.did left join
     Medicine m
     on m.id = r.mid and m.id = 1
order by p.Pname, d.dname, m.Drugname;