sql - 根据连接中的某些条件显示对的查询

标签 sql oracle join

编写一个查询来显示由同一位医生治疗的不同患者对。
下表列出:

doctor:  
d_id  
d_name  

patient:  
p_id  
p_name  

treatment:  
d_id  
p_id  
disease  
medicine  

查询:

Select p1.p_name, p2.p_name
from patient p1, patient p2, treatment t1, treatment t2
where t1.d_id=t2.d_id 
AND t1.p_id<>t2.p_id
AND t1.p_id=p2.p_id
AND t2.p_id=p1.p_id;

您能否建议一个更好/替代的查询(Oracle 风格)来消除重复对 [如 (p1,p6) 和 (p6,p1)]?

最佳答案

要搜索由同一位医生治疗的所有其他患者,请将治疗表与其本身连接起来。您可以使用distinct删除重复项:

SELECT   distinct p1.Name
,        p2.Name
FROM     patient p1
JOIN     treatment t1
ON       p1.id = t1.p_id
JOIN     treatment t2
ON       t1.d_id = t2.d_id -- Same doctor
         and t1.p_id < p2.p_id -- Higher patient nr
JOIN     patient p2
ON       p2.id = t2.p_id

条件t1.p_id < p2.p_id删除另一种重复,并交换患者。 John, MaryMary, Join 是同一对。其中之一将被 < 过滤掉情况。

关于sql - 根据连接中的某些条件显示对的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776958/

相关文章:

SQL Server "two way"2 列的唯一/主键

android - 如何启用 Genymotion 模拟器以使用主机正在使用的 WIFI 互联网

java - JPA Criteria API - 如何添加 JOIN 子句(尽可能通用的句子)

sql - 使用 select 将行添加到 Firebird 查询结果

java - 从 BatchUpdateException 确定每行执行失败的原因

oracle - 使用 DBMS_METADATA.GET_DDL 需要什么 Oracle 权限?

mysql - 主/外键;使用子查询连接多个表

mysql - 如何加入表格以返回每个团队符合特定条件的特定人数?

mysql - 如何计算投票分数为零或正面的帖子数量?

regex - 为什么非贪婪量词有时在 Oracle 正则表达式中不起作用?