oracle中怎么把有相同字段的三张表A,B,C关联呢?

oracle中怎么把有相同字段的三张表A,B,C关联呢?

相同字段全是一对多的关系。已经尝试用A.ID=B.ID AND B.ID=C.ID AND C.ID=A.ID这种方式把三张表内相同的三个字段都这么处理了,但是查询到的结果全部是重复数据

```select C.visit_date ,C.visit_no,C.patient_id ,O.DIAGNOSIS_NO
from CANCER_OUPT_PAT C,
CLINIC_MASTER M ,
OUTP_diagnosis O
WHERE C.PATIENT_ID=M.PATIENT_ID
AND C.visit_date=M.VISIT_DATE
AND C.visit_no=M.VISIT_NO
and O.PATIENT_ID=C.PATIENT_ID
AND O.visit_no=C.VISIT_NO
AND O.VISIT_DATE=M.VISIT_DATE
AND O.DIAGNOSIS_DESC = C.DIAGNOSIS_DESC
AND M.NAME=C.name


但是查询的结果全是重复的数据


## 怎么关联才能没有这些重复的数据?因为查询的列都不唯一所以不能用distanct


## 还有oracle中 where之后的判断语句是按什么顺序执行的?从where之后的第一句开始判断吗?

## 有个疑问,如果要增加查询非关联字段,是不是要在group by 后面添加增加的字段?(我尝试添加后,查询的结果又变成重复循环数据了)?

1.如果是一对多关系,只能将查询结果加distinct去重,或你根据业务看看是否有其他字段可以关联去重。
2.where的条件是按倒序执行的,即从下往上执行。

去重也可以考虑用分组group by

select C.visit_date ,C.visit_no,C.patient_id ,O.DIAGNOSIS_NO 
from CANCER_OUPT_PAT C,
CLINIC_MASTER M ,
OUTP_diagnosis O 
WHERE C.PATIENT_ID=M.PATIENT_ID
AND C.visit_date=M.VISIT_DATE 
AND C.visit_no=M.VISIT_NO 
and O.PATIENT_ID=C.PATIENT_ID 
AND O.visit_no=C.VISIT_NO 
AND O.VISIT_DATE=M.VISIT_DATE 
AND O.DIAGNOSIS_DESC = C.DIAGNOSIS_DESC 
AND M.NAME=C.name 
group by C.visit_date,  C.visit_no,C.name 
  1. 既然是一对多,按查询的原理一定是存在重复记录,只能在where语句以条件进行约束和过滤,或者在前端循环处理
  2. 表连接用where来完成,不是sql 92标准,逻辑很不清晰,建议采用left join方式书写

1.你可以选择distinct去重
2,确定好三个表的关系,确定好主表和字表,用主表left join 字表