0

クエリの結果セットに整数の 2 つのリストがあります。例: List_1: 11,16,28... List_2 11,16,19.. Where 条件でこの 2 つのリストを比較するにはどうすればよいですか?? 条件は、リストが異なる場合に選択することです。

これはコードです:

    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)
4

3 に答える 3

1

WHERE 句ではなく、結合を使用してこれを行う必要があります。あなたの質問から、2つのリストが何であるかは少し不明です。したがって、この答えは一般的な解決策を提供します。

リストが (, ) のように 2 列の形式であると仮定します。ここで、リストは複数の値で構成されます。次に、次のクエリは、まったく同じ値のセットを持つすべての 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 値が生成されます。

于 2012-06-04T21:47:59.607 に答える
0

各リストをテキスト BLOB として扱い、関数を使用して両方のテキスト値が等しいかどうかをテストします。

于 2012-06-04T22:08:24.563 に答える
0

おそらくexcept を使用できます。list_2を除くlist_1 の数が > 0 の場合、リストが異なることがわかります。

于 2012-06-04T21:34:08.650 に答える