多个表上的相同ID字段

时间:2014-06-25 03:43:44

标签: sql oracle

所以我被赋予了一项任务,我应该提出以下内容:

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是唯一的选择吗?

2 个答案:

答案 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列。

<强>参考

NATURAL JOIN on Oracle® Database SQL Language Reference

Related SO question

答案 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。起初看起来似乎是正确的事情。但是,查询的语义高度依赖于表的结构。如果重命名,删除或添加列,查询可能仍然有效,但会产生非常意外的结果。