首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果基表上的列= 'N‘,则排除Oracle SQL查询中的左外部联接

如果基表上的列= 'N‘,则排除Oracle SQL查询中的左外部联接
EN

Stack Overflow用户
提问于 2020-02-17 16:39:17
回答 1查看 70关注 0票数 0

在下面您将看到一个由5个基表组成的简单联接语句,如果(dandm_emi_cae_statement_links,表中的列geod_exclude_us_y等于'N‘,则尝试将两个左外部连接语句表JMD_UDG_DISTRIBUTION geod_us_cae_statement_links)从JMD_UDG_DISTRIBUTION语句中排除出来。

当前,SQL计划中的以下语句仍然查看这些表,如果表JMD_UDG_DISTRIBUTIONgeod_exclude_us_y = 'N',如何阻止它执行左边的外部联接

代码语言:javascript
复制
SELECT lfu.*
FROM JMD_UDG_DISTRIBUTION jud  
JOIN dm_lifeline_file_usages lfu 
    ON  lfu.group_id = jud.GROUP_SURR_ID 
JOIN dm_lifeline_file_ips lfi 
    ON  lfi.usage_group_id = lfu.group_id 
    AND lfi.lfu_surr_id = lfu.surr_id 
LEFT OUTER JOIN dandm_emi_cae_statement_links dnm 
    ON  jud.geod_exclude_us_y = 'Y' 
    AND dnm.cae=lfi.cae_number 
LEFT OUTER JOIN geod_us_cae_statement_links gucs 
    ON  jud.geod_exclude_us_y = 'Y' 
    AND gucs.cae_number=lfi.cae_number
EN

回答 1

Stack Overflow用户

发布于 2020-02-17 16:43:16

当然了。LEFT JOIN的规则如下:

  • ON条件匹配的所有行。当第二个表中没有匹配时,
  • 第一个表中的所有行。

因此,ON中第一个表上的一个条件对结果没有影响。严格地说,这不是真的。有一种奇怪的影响。第二个表中的列--即使对于其他匹配的行--都是NULL

因此,您需要在WHERE子句中进行筛选。将jud.geod_exclude_us_y = 'Y'ON子句移到:

代码语言:javascript
复制
WHERE jud.geod_exclude_us_y = 'Y'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60266877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档