所以我被赋予了一项任务,我应该提出以下内容:
ID, LNAME, FNAME, MNAME, BIRTH_DATE, RELG_CODE, NAT_CODE, PT_STATUS, RM_NO, DTTM_ADM
表格是:
HISR_CODES, PASR_NAMES, PASR_PROFILE, PAST_PATIENT_ADM
- 使用DESC
-
所以当我看到它们时,我被告知这些表上的ID是相同的。所以我到目前为止在编码方面做了什么(我将完成剩下的工作,但我需要确保首先工作):
SELECT
A.ID,
A.LNAME,
A.FNAME,
A.MNAME,
A.BIRTH_DATE,
C.RELG_CODE,
C.NAT_CODE,
B.PT_STATUS,
B.RM_NO,
B.DTTM_ADM
FROM
PASR_NAMES A,
PASR_PROFILE B,
PAST_PATIENT_ADM C,
HISR_CODES D
WHERE
A.ID = B.ID
AND
B.ID = C.ID
AND
C.ID = D.ID
有没有办法告诉表中的所有ID都是一样的?比这更简单的代码:
WHERE
A.ID = B.ID
AND
B.ID = C.ID
AND
C.ID = D.ID
或者JOIN - ON
是唯一的选择吗?
答案 0 :(得分:2)
您可以使用NATURAL JOIN,如下所示:
SELECT
A.ID,
A.LNAME,
A.FNAME,
A.MNAME,
A.BIRTH_DATE,
C.RELG_CODE,
C.NAT_CODE,
B.PT_STATUS,
B.RM_NO,
B.DTTM_ADM
FROM
PASR_NAMES A
NATURAL JOIN PASR_PROFILE B
NATURAL JOIN PAST_PATIENT_ADM C
NATURAL JOIN HISR_CODES D;
来自Oracle Reference,“自然连接基于两个表中具有相同名称的所有列。”因此,联接也有可能基于其他列发生。因此,建议您仍使用INNER JOIN语法并显式指定JOIN列。
<强>参考强>:
答案 1 :(得分:0)
使用正确的join
语法:
FROM PASR_NAMES A JOIN
PASR_PROFILE B
ON A.ID = B.ID JOIN
PAST_PATIENT_ADM C
ON B.ID = C.ID JOIn
HISR_CODES D
ON C.ID = D.ID
或者:
FROM PASR_NAMES A JOIN
PASR_PROFILE B
USING (ID) JOIN
PAST_PATIENT_ADM C
USING (ID)
HISR_CODES D
USING (ID)
我不鼓励你使用natural join
。起初看起来似乎是正确的事情。但是,查询的语义高度依赖于表的结构。如果重命名,删除或添加列,查询可能仍然有效,但会产生非常意外的结果。