【发布时间】:2016-08-29 22:37:12
【问题描述】:
表 1 - DBT_C_INT_ACCR
select INT_ACC.BRCH_CODE, INT_ACC.PROD_CODE, INT_ACC.REF_ID from DBT_C_INT_ACCR INT_ACC where BRCH_CODE = 784 and PROD_CODE = 'GF' and REF_ID = 'GFE1200077';
BRCH_CODE PROD_CODE REF_ID
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
表 2 - dbt_c_rate_refresh
select INT_ACC.BRCH_CODE, INT_ACC.PROD_CODE, INT_ACC.REF_ID from dbt_c_rate_refresh INT_ACC where BRCH_CODE = 784 and PROD_CODE = 'GF' and REF_ID = 'GFE1200077';
BRCH_CODE PROD_CODE REF_ID
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
784 GF GFE1200077
现在,当尝试使用下面的 Join 时,它会给出 28 行而不是 4 行。有什么解释吗?
select INT_ACC.ref_id, RATE_REFRESH.ref_id from DBT_C_INT_ACCR INT_ACC left OUTER JOIN dbt_c_rate_refresh RATE_REFRESH ON (INT_ACC.BRCH_CODE = RATE_REFRESH.BRCH_CODE and INT_ACC.PROD_CODE = RATE_REFRESH.PROD_CODE and INT_ACC.REF_ID = RATE_REFRESH.REF_ID)
where INT_ACC.BRCH_CODE = '784' and INT_ACC.PROD_CODE = 'GF' and INT_ACC.REF_ID = 'GFE1200077';
REF_ID REF_ID_1
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
GFE1200077 GFE1200077
【问题讨论】:
-
它给出了相同的编号。任何类型的连接的结果..
-
您使用的是哪个 RDMS... mysql 或 oracle?当您加入多对多关系时,它会在您的联接中提供多行。
-
您的表中有 7 + 4 个完全相等的行,因此连接只执行笛卡尔 (7*4)。你为什么期望 4 个?