2012-06-04 42 views
0

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

这是代码:

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 = [email protected]_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) 

回答

0

你也许可以使用except。如果list_1 的计数除了 list_2大于0,那么您知道列表是不同的。

+0

语法怎么样?比较这两个选择? – inec

+0

(SELECT ...)EXCEPT(SELECT ...) –

+0

如果只在列表不同的情况下选择,则可以。 SELECT ... WHERE((list_1 select)EXCEPT(list_2 select)> 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值。

0

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