如何比较两个int列表,结果集?

时间:2012-06-04 21:29:28

标签: sql

我在查询的结果集中有两个整数列表,例如:List_1:11,16,28 ... List_2 11,16,19 ..如何在Where条件中比较这两个列表?条件是如果列表不同,请进行选择。

这是代码:

    SELECT cosechaAnterior.c_Fk_IdBoleta as 'BOLETA_P16', cosechaAnteriorDestino.c_Fk_IdBoleta as 'BOLETA_P17'
FROM Clt_CosechaAnterior cosechaAnterior
INNER JOIN  Clt_CosechaAnteriorDestino cosechaAnteriorDestino
ON cosechaAnterior.si_Fk_IdDesglose = cosechaAnteriorDestino.si_Fk_IdDesglose
INNER JOIN Blt_Boleta as boleta
ON cosechaAnterior.c_Fk_IdBoleta = boleta.c_Pk_IdBoleta
WHERE  --boleta.c_Pk_IdBoleta = 44990112--@id_boleta  
           (select si_Fk_IdDesglose
           from Clt_CosechaAnteriorDestino as cosechaAnteriorDestino
           where SUBSTRING(cosechaAnteriorDestino.c_Fk_IdBoleta,5,4) = '0112'
           AND cosechaAnteriorDestino.c_Fk_IdBoleta = 44990112)              (select si_Fk_IdDesglose
                                                                              from Clt_CosechaAnterior as cosechaAnterior
                                                                              where SUBSTRING(cosechaAnterior.c_Fk_IdBoleta,5,4)= '0112'
                                                                              AND cosechaAnterior.c_Fk_IdBoleta = 44990112)

3 个答案:

答案 0 :(得分:1)

您希望使用连接而不是WHERE子句来执行此操作。从你的问题来看,这两个清单是什么有点不清楚。所以这个答案提供了一般解决方案。

假设列表采用两列格式为(,),其中列表由多个值组成。然后,以下查询将返回具有完全相同值集的所有ID:

select list1.id
from (<subquery 1>) list1 full outer join
     (<subquery 2>) list2
     on list1.id = list2.id and
        list1.val = list2.val
group by list1.id
having max(case when list1.id is null then 1 else 0 end) = 0 and
       max(case when list2.id is null then 1 else 0 end) = 0

(此表述假设值中没有重复。)

这是一个完整的外连接,只选择连接两侧没有NULL值的id。当元素不匹配时,在完全外连接上生成NULL值。

答案 1 :(得分:0)

您可以使用except。如果list_1 的计数 list_2除外> 0,那么你知道列表是不同的。

答案 2 :(得分:0)

将每个列表视为文本blob,并使用该函数测试两个文本值是否相等。