联合查询问题 - 选择列表不兼容

时间:2011-07-19 20:23:24

标签: sql

一直在处理这个问题已经有一段时间了......继续得到错误“Corrosponding select-list表达式不兼容。我在每个select语句中选择相同的#列。

create volatile table dt as (
SELECT 

            gcv.I_SYS_IDV,
             gcv.i_pln,
             gcv.c_typ_cov,
             gcv.d_eff,
             gcv.d_eff_pln,
             gcv.c_sta,
            gcv.d_sta,
            gcv.c_mde_bft_fst,
            gcv.a_bft_fst,
            gcv.c_mde_bft_sec,
             gcv.a_bft_sec,
            gcv.c_mde_bft_trd,
             gcv.a_bft_trd,
             gcv.p_cre_hom,
             gcv.c_cl_rsk,
             gpv.c_val,
             gpv.i_val,
             gcv.c_pol,
             gpv.i_prv



            FROM Pearl_P.tltc906_gcv gcv,
             pearl_p.tltc912_gpv gpv

              WHERE  gcv.i_pln > 0
            AND gcv.i_pln = gpv.i_pln
            and gpv.i_prv = '36'
            and gcv.c_pol between 'lac100001' and 'lac100004'

         UNION

             SELECT
             gcv.I_SYS_IDV,
             gcv.i_pln,
             gcv.c_typ_cov,
             gcv.d_eff,
             gcv.d_eff_pln,
             gcv.c_sta,
             gcv.d_sta,
             gcv.c_mde_bft_fst,
             gcv.a_bft_fst,
             gcv.c_mde_bft_sec,
             gcv.a_bft_sec,
             gcv.c_mde_bft_trd,
             gcv.a_bft_trd,
             gcv.p_cre_hom,
             gcv.c_cl_rsk,
             gcv.c_pol,
             gpv.i_val,
            gpv.i_pln,
             gpv.i_prv


        FROM Pearl_P.tltc906_gcv gcv,
        pearl_p.tltc912_gpv gpv


            where NOT EXISTS(
            SELECT 1
            FROM pearl_p.tltc906_gcv gcv,
             pearl_p.tltc912_gpv gpv

            WHERE  gcv.i_pln > 0
            AND gcv.i_pln = gpv.i_pln
            and gpv.i_prv = '36'
            )
        ) with data 
PRIMARY INDEX (i_sys_idv)
on commit preserve rows;

4 个答案:

答案 0 :(得分:1)

第二个select语句的最后4个值与第一个语句中的值不匹配。尝试命名(使用别名)这些列相同的东西(配对它们)。要结合,您需要在集合之间使用相同的列。

退房:http://msdn.microsoft.com/en-us/library/ms180026.aspx

  

以下是组合两个结果集的基本规则   使用UNION进行查询:

     

列的数量和顺序必须完全相同   查询。

     

数据类型必须兼容。

答案 1 :(得分:0)

您应该检查每列的数据类型。每个SELECT语句之间的数据类型必须兼容。

答案 2 :(得分:0)

查询的两个部分中每列的数据类型是否相同?

如果列名的第一个字符表示数据类型(i =整数,c =字符等),我猜测问题出在选择列表中的倒数第二列。第一个查询是选择gcv.c_pol,第二个查询是选择gpv.i_pln。

答案 3 :(得分:0)

开始注释掉行直到它起作用。即,注释掉每个选择列表中的所有字段,然后一个一个地取消注释第一个,然后是第二个,等等。你最终会找到它。