Mysql 如何根据唯一条件从两个表中获取数据。我觉得加入不是一个合适的解决方案
我有两个表,一个是User,另一个是TreatmentStatusTable。用户表有两种类型的用户,一种是医生,另一种是患者。医生可以对患者进行治疗,并将状态输入到治疗状态表中 医生每次看病人都会被打上记号。在下一个问题中,我只想看那些到目前为止医生还没有看过的病人。我应该如何有效地实现它 这是我的场景: 使用者 治疗状态表Mysql 如何根据唯一条件从两个表中获取数据。我觉得加入不是一个合适的解决方案,mysql,sql,database,join,backend,Mysql,Sql,Database,Join,Backend,我有两个表,一个是User,另一个是TreatmentStatusTable。用户表有两种类型的用户,一种是医生,另一种是患者。医生可以对患者进行治疗,并将状态输入到治疗状态表中 医生每次看病人都会被打上记号。在下一个问题中,我只想看那些到目前为止医生还没有看过的病人。我应该如何有效地实现它 这是我的场景: 使用者 治疗状态表 treated_by- User.id (UserId of doctor) treated_to User.id (UserId of patient) treatme
treated_by- User.id (UserId of doctor)
treated_to User.id (UserId of patient)
treatment_status cured/referd
现在我想在用户表中找到医生没有找到的所有剩余患者
有机会见到病人吗
因此,查询应该类似于
Select *
from User
where user.id not in (
Select User.id
from TreatmentStatusTable
where treated_by= User.id). <- this the doctor's user.id
所以基本上是从医生还没有看过的用户表中获取所有用户
上面的问题对我有用。但我相信,一旦后面的query2nd查询的结果大小达到几千,这个查询就会失败
有谁能给我一个更好的方法,以更有效的方式查询这些数据吗?我想你不希望存在。大概是这样的:
select u.*
from users u
where u.user_type = 'patient' and
not exists (select 1
from treatmentstatustable tst
where tst.treated_to = u.id
);
为了提高性能,您需要在TreatmentStatusTableTreatted\u上创建一个索引。对于上万行或更多行,性能应该很好。我不知道为什么您认为联接不是一个合适的解决方案 我会这样写:
Select u.*
from User AS u
left outer join TreatmentStatusTable AS t
on u.id = t.treated_to
where t.treated_to is null
如果给定用户没有匹配的行,则外部联接将为t中的列返回null。如果我们使用where条件将结果限制在t为空的情况下,那么它必须是没有看过医生的用户
这是编写排除联接以查找不匹配行的常用方法。在过程中的什么时候在TreatmentStatusTable中创建行?在子查询中使用SELECT*无论如何都无效,因为*将每行返回三列。您无法将其与外部查询谓词中的单个列进行比较。我如何使用它仅获取userType=patient并限制每次仅获取N条记录。你应该能弄明白的。谢谢。此查询正在运行。我想要一个关于TreatmentStatusTableTreatted\u的索引?这对性能有什么帮助?这使得不存在子查询只是一个索引查找。很难比这更快。谢谢。这回答了我的问题。你能告诉我,在我的场景中,这两种方法中哪一种效果更好?
Select u.*
from User AS u
left outer join TreatmentStatusTable AS t
on u.id = t.treated_to
where t.treated_to is null