gpt4 book ai didi

sql - 当表连接到自身时,WHERE 子句如何工作?

转载 作者:行者123 更新时间:2023-12-02 06:38:23 26 4
gpt4 key购买 nike

我正在重写一个由 Business Objects 生成并使用“老式”隐式连接语法的查询。该代码在一部分中将一个表连接到自身,并且还有一个“全局”where 子句。例如:

select   a.col1
, b.col2
from MYDB.TABLE a, MYDB.TABLE b
where a.something=b.something_else
and MYDB.TABLE.source='A'

以上是对问题的编造说明。实际查询很长,连接了大约十个表。

我的问题:如上所述,“额外的”where 条件是否适用于同一个表的两个实例?我想是的,但我以前从未见过这样的代码。我正在使用 Teradata,但我认为这是一个一般的 SQL 问题。

更新:也许我试图缩小问题的范围并不准确。这是我要修改的完整查询:

SELECT
abs_contrct_prof.contrct_nbr_txt,
gbs_org_LVL1.bus_pln_sgmnt_cd,
abs_gnrc_lst_of_val_LVL1.wirls_val_1_txt
FROM
EDWABSUSERVIEWS.abs_contrct abs_contrct_prof,
EDWABSUSERVIEWS.gbs_org gbs_org_LVL1,
EDWABSUSERVIEWS.abs_gnrc_lst_of_val abs_gnrc_lst_of_val_LVL1,
EDWABSUSERVIEWS.abs_contrct,
EDWABSUSERVIEWS.gbs_sls_actv_blng_org_rltd,
EDWABSUSERVIEWS.gbs_sls_actv_org_rltd
WHERE
( abs_contrct_prof.type_cd = 'PROFILE' )
AND ( EDWABSUSERVIEWS.abs_contrct.type_cd = 'AGREEMENT' )
AND ( abs_contrct_prof.prnt_contrct_id=EDWABSUSERVIEWS.abs_contrct.contrct_id )
AND ( abs_contrct_prof.org_id=EDWABSUSERVIEWS.gbs_sls_actv_org_rltd.org_id )
AND ( EDWABSUSERVIEWS.gbs_sls_actv_org_rltd.gbs_lvl_3_org_id=EDWABSUSERVIEWS.gbs_sls_actv_blng_org_rltd.gbs_lvl_3_org_id )
AND ( EDWABSUSERVIEWS.gbs_sls_actv_blng_org_rltd.gbs_lvl_1_org_id = gbs_org_LVL1.org_id )
AND ( gbs_org_LVL1.bus_pln_sgmnt_cd=abs_gnrc_lst_of_val_LVL1.nm_txt and abs_gnrc_lst_of_val_LVL1.actv_ind = 'Y' and abs_gnrc_lst_of_val_LVL1.type_cd ='ABS_MOBILITY_SEGMENT' )
AND
abs_contrct_prof.contrct_nbr_txt IN @variable('FAN')
AND ( EDWABSUSERVIEWS.abs_contrct.sts_cd = 'Active' )
AND ( EDWABSUSERVIEWS.abs_contrct.type_cd='AGREEMENT' )

请注意表 EDWABSUSERVIEWS.abs_contrct 在 FROM 子句中被引用了两次,一次使用了别名,一次没有。是的,这个查询按编写的方式工作,但我想重新编写它以使用显式连接语法(正如有人评论的那样)。

我对查询运行了 EXPLAIN,看起来“额外的”where 条件(针对“Active”和“AGREEMENT”)实际上分别应用于表的两个实例。

最佳答案

Does the "extra" where condition apply to both instances of the same table?

不,它没有。它仅适用于表的一个实例。

另外,这样写的查询是不正确的,它应该(并且可能会)在大多数 SQL 实现中给出错误。您必须命名 ab:

select   a.col1
, b.col2
from MYDB.TABLE a, MYDB.TABLE b
where a.something=b.something_else
and a.source = 'A' --or:-- and b.source = 'A'

关于sql - 当表连接到自身时,WHERE 子句如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com