我在查询的结果集中有两个整数列表,例如: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)
答案 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,并使用该函数测试两个文本值是否相等。