Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加入Db2查询_Sql_Db2 - Fatal编程技术网

Sql 加入Db2查询

Sql 加入Db2查询,sql,db2,Sql,Db2,我使用内部联接联接了两个表。这里表TPREG的主键是co\u id和pol\u id SELECT (SELECT etbl_desc_txt FROM uding604.tedit e WHERE etbl_typ_id = 'PITCD' AND co_id = 'CP' AND etbl_valu_id = p.pol_ind_typ_cd) pol_ind_typ_cd, (SELECT etbl_desc_

我使用内部联接联接了两个表。这里表
TPREG
的主键是
co\u id
pol\u id

 SELECT (SELECT etbl_desc_txt
       FROM uding604.tedit e
       WHERE etbl_typ_id = 'PITCD'
       AND   co_id = 'CP'
       AND   etbl_valu_id = p.pol_ind_typ_cd) pol_ind_typ_cd,
       (SELECT etbl_desc_txt
        FROM uding604.tedit e
        WHERE etbl_typ_id = 'PAYT'
        AND   co_id = 'CP'
        AND   etbl_valu_id = p.POL_BILL_TYP_CD) POL_BILL_TYP_CD,
       POL_PAC_DRW_DY,
       (SELECT etbl_desc_txt
        FROM uding604.tedit e
        WHERE etbl_typ_id = 'PAYM'
        AND   co_id = 'CP'
        AND   etbl_valu_id = p.POL_BILL_MODE_CD) POL_BILL_MODE_CD,
       t.SOURCE_CD
FROM uding604.tpol p,
     uding604.TPREG t
WHERE p.co_id = t.co_id
AND   p.pol_id = t.pol_id
AND   p.co_id = 'CP'
AND   p.pol_id = '000000011'
AND   t.co_id = 'CP'
AND   t.pol_id = '000000011'
如何使此查询更简单


请指导。

您可以将子查询Yes转换为联接:

SELECT e1.etbl_desc_txt as pol_ind_typ_cd,
       e2.etbl_desc_txt as POL_BILL_TYP_CD,
       POL_PAC_DRW_DY,
       e3etbl_desc_txt as POL_BILL_MODE_CD,
       t.SOURCE_CD
FROM uding604.tpol p,
     uding604.TPREG t,
     uding604.tedit e1,
     uding604.tedit e2,
     uding604.tedit e3
WHERE p.co_id = t.co_id
AND   p.pol_id = t.pol_id
AND   p.co_id = 'CP'
AND   p.pol_id = '000000011'
AND   t.co_id = 'CP'
AND   t.pol_id = '000000011'
AND   e1.etbl_typ_id = 'PITCD'
AND   e1.co_id = 'CP'
AND   e1.etbl_valu_id = p.pol_ind_typ_cd
AND   e2.etbl_typ_id = 'PAYT'
AND   e2.co_id = 'CP'
AND   e2.etbl_valu_id = p.POL_BILL_TYP_CD
AND   e3.etbl_typ_id = 'PAYM'
AND   e3.co_id = 'CP'
AND   e3.etbl_valu_id = p.POL_BILL_MODE_CD
查询在
select
子句上更清晰,但在
Where
子句上模糊

我们可以做的是继续使用ANSI连接语法:

SELECT e1.etbl_desc_txt as pol_ind_typ_cd,
       e2.etbl_desc_txt as POL_BILL_TYP_CD,
       POL_PAC_DRW_DY,
       e3etbl_desc_txt as POL_BILL_MODE_CD,
       t.SOURCE_CD
FROM uding604.tpol p 
JOIN uding604.TPREG t on (p.co_id = t.co_id AND p.pol_id = t.pol_id)
JOIN uding604.tedit e1 on (e1.etbl_valu_id = p.pol_ind_typ_cd and e1.co_id = p.co_id)
JOIN uding604.tedit e2 on (e2.etbl_valu_id = p.POL_BILL_TYP_CD and e2.co_id = p.co_id)
JOIN uding604.tedit e3 on (e3.etbl_valu_id = p.POL_BILL_MODE_CD and e3.co_id = p.co_id)
WHERE p.co_id = 'CP'
AND   p.pol_id = '000000011'
AND   t.co_id = 'CP'
AND   t.pol_id = '000000011'
AND   e1.etbl_typ_id = 'PITCD'
AND   e2.etbl_typ_id = 'PAYT'
AND   e3.etbl_typ_id = 'PAYM'
现在更清楚你想要什么了

注1。您可以尝试删除

AND   t.co_id = 'CP'
AND   t.pol_id = '000000011'
因为逻辑不是必需的

注2。您必须测试这些查询是否返回与您的查询相同的结果

注3。您应该始终使用ANSI JOIN语法,这将在您不期望的情况下对您有所帮助