SQL Query两个连接导致重复

时间:2015-11-11 02:51:29

标签: sql-server-2012

*我只是提供必要的数据而不是全部以避免混淆 结构

tbl_job_plist

-jplist_id(PK) -jplist_position

tbl_prf

-prf_id(PK) -prf_job_post_ref

tbl_applicant

-ap_id(PK) -ap_position_applied -ap_status

样本数据

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     |   Robert  |

所以这是项目的流程。首先,您需要创建一个作业发布(tbl_job_plist)。然后在那之后创建一个人员请求(tbl_prf),你需要指明作业发布参考,这将是prf_job_post_ref的值。其他人员请求可以指示相同的职位发布。然后,申请人将从显示的职位发布列表中选择ap_position_applied的值,并将ap_status 1作为默认值。

所以,如果我要查询所有申请人的ap_status为1,这将是我的查询

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  | 

但我只想返回不会重复的结果。

我知道因为

LEFT JOIN tbl_prf ON tbl_job_plist.jplist_id = tbl_prf.prf_job_post_ref

我收到了这个结果。所以我在根据我提供的流程编辑我的结构时询问你的建议。谢谢你们

2 个答案:

答案 0 :(得分:0)

如果您不想显示重复数据,可以尝试GROUP BY。

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 
GROUP BY tbl_applicant.ap_id,tbl_applicant.ap_name, tbl_job_plist.jplist_id,tbl_prf.prf_id 

OR

您可以尝试使用DISTINCT

SELECT DISTINCT
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

答案 1 :(得分:0)

将此更改为正确加入时会发生什么?

LEFT JOIN tbl_prf ON tbl_job_plist.jplist_id = tbl_prf.prf_job_post_ref