SQL查询中表的复杂连接

时间:2014-02-02 03:25:39

标签: mysql sql join left-join jointable

我的问题是关于在查询中加入这些表。我们有4个名为prsn的表,其中有prsn详细信息,然后 * prsn_rltn有受益人的id,但该受益人的详细信息将仅出现在prsn表中,即PRSN_ID将我们有一个名为payment的表,然后是一个名为payment的表。下面是每个表中的列。

**PRSN**:
PRSN_ID EMPLOYEE_ID NAME    BRTH_DT
**PRSN_RLTN**:
PRIM_PRSN_ID   SCND_PRSN_ID
**PAYMENT**:
PRSN_ID   PMT_ID   PMT_BEGIN_DATE
**PAYMENT FORM**:
PRSN_ID   PMT_FORM_ID

问题是我们必须让人有一个特殊的pmt_id(例如:1000)和pmt_begin_date(例如:01/01/2014)。他的employee_id,name和brth_dt应该与他的受益人的id,姓名和brth_dt。我已经编写了一个代码来显示除受益人详细信息之外的所有其他详细信息。因此,请查看下面的查询,让我知道如何显示受益人的详细信息。

SELECT
,A.PRSN_ID
,A.EMPLOYEE_ID
,A.NAME
,A.BRTH_DT
,B.PMT_ID
,B.PMT_BEGIN_DATE
,C.PMT_FORM_ID

FROM
&DATABASE.PRSN AS A

LEFT JOIN  &DATABASE.PAYMENT_FORM AS C
ON A.PRSN_ID = C.PRSN_ID
AND C.PMT_FORM_ID=200       

&DATABASE.PAYMENT AS B

WHERE
B.PMT_ID = 1000
AND B.PMT_BEGIN_DATE='01/01/2014'                         

1 个答案:

答案 0 :(得分:0)

您的查询在语法上是错误的。您需要为每个表JOIN,尝试以下查询,看看它是否有帮助。 LEFT JOINJOIN也不一样,所以请在使用它们之前先阅读它们。

SELECT
    A.PRSN_ID
    ,A.EMPLOYEE_ID
    ,A.NAME
    ,A.BRTH_DT
    ,B.PMT_ID
    ,B.PMT_BEGIN_DATE
    ,C.PMT_FORM_ID
    ,B.PRSN_ID
    ,B.EMPLOYEE_ID
    ,B.NAME
FROM &DATABASE.PRSN AS A
    LEFT JOIN  &DATABASE.PAYMENT_FORM AS C
    ON A.PRSN_ID = C.PRSN_ID
    AND C.PMT_FORM_ID=200
    LEFT JOIN &DATABASE.PAYMENT AS P ON C.PMT_FORM_ID = P.PMT_ID
    LEFT JOIN PRSN_RLTN R ON R.PRIM_PRSN_ID = A.PRSN_ID
    LEFT JOIN &DATABASE.PRSN AS B ON B.PRSN_ID = R.SCND_PRSN_ID
WHERE
    B.PMT_ID = 1000
    AND B.PMT_BEGIN_DATE='01/01/2014'