如何通过SQL Join查询获取指定字段组合的目标数据
正确SQL查询实现两组特定组合数据获取
方案一:使用OR分组条件(显式逻辑分支)
SELECT a.port_code, a.ata_berth_stamp, a.atd_berth_stamp, a.ata_end_sea_stamp, a.atd_start_sea_stamp, b.pic_uid, a.updt_stamp FROM pcc_app_own.voy_port_call a JOIN pcc_app_own.voy b ON a.voy_uid = b.voy_uid WHERE a.del_flg = 'N' AND ( (b.voy_name = 'GRACIOUS ACE 0077A' AND a.port_code = 'ABC') OR (b.voy_name = 'ADRIA ACE 0045A' AND a.port_code = 'DEF') )
方案二:使用IN匹配组合条件(简洁写法)
SELECT a.port_code, a.ata_berth_stamp, a.atd_berth_stamp, a.ata_end_sea_stamp, a.atd_start_sea_stamp, b.pic_uid, a.updt_stamp FROM pcc_app_own.voy_port_call a JOIN pcc_app_own.voy b ON a.voy_uid = b.voy_uid WHERE a.del_flg = 'N' AND (b.voy_name, a.port_code) IN ( ('GRACIOUS ACE 0077A', 'ABC'), ('ADRIA ACE 0045A', 'DEF') )
错误原因说明
你之前的第二个查询逻辑矛盾:用AND同时要求同一行的b.voy_name等于两个不同值、a.port_code等于两个不同值,这在单一行数据中不可能实现,导致查询逻辑失效。正确的做法是将两组独立的匹配条件用OR分隔,并用括号确保每组条件内部的AND优先级高于OR,避免逻辑混乱。
另外,建议使用显式JOIN语法替代隐式的逗号分隔表写法,提升代码可读性与逻辑清晰度。
内容的提问来源于stack exchange,提问作者BRuidas
相关产品推荐
相关产品推荐

