如果ID高效率地存在于第二个或第三个表中,该如何从第一个表中进行选择?

十分钱

我有3张桌子分配。第一个表:患者:patid,fname,lname,recordnum。患者:patid,drid,PATIENTCLIN:patid,clinid。

我需要按fname或lname来选择患者,如果在表“ PATIENTDR”中找到表“ PATIENTDR”中的“ PATID”如果DRID =“ $ docotr-> id”或“ PATIENTCLIN”如果CLINID =“ $ clinic-> clinid”

这是我的查询

SELECT t1.* FROM patient t1  
WHERE patlname like  '{$search_patlname}%' 
AND patfname like '{$search_patfname}%' 
AND 
(  
 EXISTS 
   (SELECT patid FROM patientdr t2 WHERE t2.drid = '{$doctor->id}' AND t2.patid = t1.patid) 

     OR  EXISTS 

   (SELECT patid FROM patientclin t3 WHERE t3.clinid = '{$clinic->clinid}' AND t3.patid = t1.patid) 
 ) 
LIMIT 10

患者人数可能非常多,将使用ajax并考虑以下注意事项来检索数据:

“在MySQL中使用EXISTS条件的SQL语句效率很低,因为子查询针对外部查询表中的每一行都是RE-RUN。有许多更有效的方式来编写大多数不使用EXISTS条件的查询。”

有没有一种更有效的方式来编写此查询,也许我应该打破规则,在病人表和病人表中插入病人的fname和lname来减少响应时间,或者将结果限制为10行足够有效?预先感谢您的各种帮助。

内特·沃恩(Nate Vaughan)

如评论中所述,这可以通过简单的INNER JOIN解决:

SELECT t1.* 
FROM patient t1
INNER JOIN (
    SELECT patid 
    FROM patientdr t2 
    WHERE t2.drid = '{$doctor->id}' 
    UNION DISTINCT
    SELECT patid 
    FROM patientclin t3 
    WHERE t3.clinid = '{$clinic->clinid}'
) i
ON t1.patid = i.patid
WHERE patlname like  '{$search_patlname}%' 
AND patfname like '{$search_patfname}%' 
LIMIT 10

如果您还没有阅读有关INNER JOIN的文档,那么值得花些时间阅读并处理一些使用它的查询。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从第二个和第三个表中获取与第一个表中的匹配值相对应的值

如果第一个值不存在,如何使用拆分的第二个和第三个值?(Java)

使用scala或spark sql从第一个表中选择不存在于spark中的第二个表中的值

从SQL查询中获取第一个/第二个/第三个元素

显示三个表的所有记录,即使第一个表中的记录不在第二个或第三个表中

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql

如何使用CSS类在第一个,第二个或第三个html元素中选择子元素?

如何从jQuery中的.each循环中获取第一个,第二个和第三个元素的值?

如何根据第一个选项选择更改第二个下拉列表和基于第二个选项选择的第三个下拉列表

Bash(单行):如果第一个成功,则执行第二个命令;如果不成功,则执行第三个命令?

从字符串 id 数组创建对象数组,第一个对象的第一个值是第二个,第二个是第三个,依此类推

我在第一个下拉列表中保留了选择选项值,但没有保留第二个或第三个

获取空对象引用如果我在第三个活动之前开始第二个活动(如果我直接从第一个移到第三个,则没有错误)

如果第一个表中的总和大于第二个表中的总和,如何从两个表中进行选择并进行比较?

从第一个文件中搜索第二个文件,然后输出到python中的第三个文件

如何快速设置数字上方的第一个、第二个和第三个字母

如何在 Python 中按升序对第一个变量、按自定义顺序的第二个变量和降序的第三个变量对 Python 中的 DataFrame 进行排序

使用矢量化在 nan 之后获取 numpy 数组行中的第一个/第二个/第三个...值

目标c如何根据选择第一个文本字段项目删除第二个和第三个文本字段中的项目

如何使用Flexbox将三个元素放在同一列中,第一个元素放在顶部,第二个和第三个元素位于剩余空间的中心?

RxJ:一个接一个地执行3个可观察对象,并使用第一个,第二个以及第三个请求中的第一个和第二个请求的结果

如何将第二个表的两个条目作为两列,以便从第一个表中进行选择查询?

在每次访问时,获取一个非随机字段,但从第一个、第二个、第三个

在表单中,选择第二个表和第一个表

array_diff()处理第二个数组中的重复项,该重复项存在于第一个数组中

如何将数组元素作为子数组插入,例如第一个元素是第二个的父级,第二个是第三个的父级,依此类推?

通过连接第三个表更新第二个表中的表值

如何在点击时播放第一个音频,在第二次点击时播放第二个音频,在第三次点击时播放第三个音频,Jquery

从第三个活动返回到第一个活动并跳过第二个活动