SQL查询LEFT JOIN导致两个输出,但应该只有一个

时间:2015-11-06 02:14:14

标签: sql-server-2012

我在我的表结构中遇到问题并在结果中查询我想要的是它只输出一个结果,这是第一个结果。我应该对表格结构做出哪些改变?因为它只返回相同的输出但不同的prf_id。

情况就是这样。 tbl_prf是为了人员的要求。 tbl_job_plist用于发布的作业,tbl_applicant用于申请人。当我在tbl_prf中添加一个条目时,它将从其参考示例的tbl_job_plist中选择该条目。然后,当我试图查看申请人时,需要显示所选tbl_job_plist的tbl_prf ID和ID。这就是我提出代码的方式。当我查看申请人时会发生什么情况它会选择两个tbl_prf条目,导致两个输出与同一申请人。

我要做的是让ap_status为1的申请人。你可以看到我只有一个申请人,所以我只期待一个结果。如果prf_job_post_ref和jplist_id相等,那么申请人姓名会继续显示在结果上。我该如何预防呢? tbl_prf

prf_id       | prf_job_post_ref |           
------------------------------------       
1            |        1         |
3            |        1         |

tbl_job_plist

jplist_id    | jplist_position     |
------------------------------------
1            |        Crew         |

tbl_applicant

ap_id        | ap_position_applied | ap_status | ap_name |
----------------------------------------------------------
1            |        1            |     1     |   Kurt  |

QUERY

    SELECT
    tbl_applicant.ap_id, 
    tbl_applicant.ap_name,
    tbl_job_plist.jplist_id, 
    tbl_prf.prf_id 
    FROM tbl_applicant 
    LEFT JOIN tbl_job_plist ON tbl_applicant.ap_position_applied = tbl_job_plist.jplist_id 
    LEFT JOIN tbl_prf ON tbl_job_plist.jplist_id = tbl_prf.prf_job_post_ref 
    WHERE ap_status = 1

结果

ap_id        | jplist_id           | prf_id     | ap_name |
-----------------------------------------------------------
1            |        1            |     1      |   Kurt  |
1            |        1            |     3      |   Kurt  |

2 个答案:

答案 0 :(得分:0)

根据你的评论只想要一行而不关心哪一行,你可以使用TOP,就像这样......

SELECT TOP 1
    tbl_applicant.ap_id, 
    tbl_job_plist.jplist_id, 
    tbl_prf.prf_id 
    FROM tbl_applicant 
    LEFT JOIN tbl_job_plist ON tbl_applicant.ap_position_applied = tbl_job_plist.jplist_id 
    LEFT JOIN tbl_prf ON tbl_job_plist.jplist_id = tbl_prf.prf_job_post_ref 
    WHERE ap_status = 1

答案 1 :(得分:0)

根据要返回的两个拖链中的哪一个,您可以使用MAX或MIN子查询。所以

之后

LEFT JOIN tbl_prf ON tbl_job_plist.jplist_id = tbl_prf.prf_job_post_ref

你可以把

and tbl_prf.prf_id =(select max(pe.prf_id) from tbl_prf pe where pe.prf_job_post_ref= tbl_prf.prf_job_post_ref )

这将返回示例中值为3的行。