回答

收藏

如何防止内部联接查询重复(Postgres)

技术问答 技术问答 342 人阅读 | 0 人回复 | 2023-09-14

基于内部连接过滤掉一些结果,我试图了解如何创建查询。
5 T+ t% A% i+ f* U考虑以下数据:
* y3 h3 i0 K1 g, Q9 n' p: Xformulation_batch-----id  project_id  name                                                                      F1.12 12                                                                                                                F1.233  1                               F1.34                                                                                                                                                                                                                                                                         F1.allformulation_batch_component-----id  formulation_batch_id    component_id                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        我想选择project_id为1的所有composition_batch并有记录component_id为1或2的composition_batch_component。因此,我操作以下查询:
/ H4 k% `! ^" Y& e- n- }9 ]SELECT formulation_batch.* FROM formulation_batch INNER JOIN formulation_batch_componentON formulation_batch.id = formulation_batch_component.formulation_batch_idWHERE formulation_batch.project_id = 1     AND ((formulation_batch_component.component_id =  2                                                                                                                                                                                                                                                                                                                                                                                                                            OR formulation_batch_component.component_id = 1 ))但这将返回重复条目:
2 n# T3 e4 [7 }1;"F1.1"2;"F1.2"4;"F1.all"4;"F1.all"有没有办法修改此查询,以便只获得与条件相匹配的唯一方法?composition_batch记录?; e& L3 f% I+ w% i8 S* `
例如:' B% t; d% ^7 ?
1;"F1.1"2;"F1.2"4;"F1.all"谢谢你的时间!, Q% t; K# ~3 S! `1 Q8 Y
                                                               
5 Q9 c  }6 `# F) ]+ ?& z    解决方案:                                                               
% n$ o! X$ t0 L* {4 t4 v$ X' i                                                                一种方法是使用distinct:
0 o8 \: I( x6 ?6 c2 ESELECT distinct "formulation_batch".* FROM "formulation_batch" INNER JOIN "formulation_batch_component" ON "formulation_batch"."id" = "formulation_batch_component"."formulationBatch_id" WHERE "formulation_batch"."project_id" = 1     AND (("formulation_batch_component"."component_id" =  2                                                                                                                                                                                                                                                                                                                                                                                                                            OR "formulation_batch_component"."component_id" =
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则