-1

こんにちは、ここに私の小さな問題があります。私はSQLに取り組んでおり、SQLデータベースから値を取得するための論理操作がいくつかあります。私はスクリーンショットを持っています。参照してください

ここに画像の説明を入力

その中で、さまざまな組み合わせで4つのクエリがあります。1 と 2の両方を使用すると同じ答えが得られ、3と 4を使用すると異なる答えが得られます。今私の質問には、2つの演算子1.OR と 2.And Not があり、フィルター while は変数がnである可能性があることを意味します。今私の質問は

  1. 指定された変数のさまざまな組み合わせを取得したい
  2. 同じ結果が得られる可能性を排除する必要があります

どんなアルゴリズムのコーディングも大歓迎です

誰かすぐに助けてくれませんか

アップデート

より明確に

a、b、c、dという4つのがある場合、 次のようなdiffの組み合わせを組み立てる必要があります

1. (a または b) かつ not( c または d)

2. a または ( c ではなく b ) または d

私は自分の質問を更新しました..このように、別の組み合わせを生成して答えを得る必要があります

4

1 に答える 1

1

セット内の複数の行を比較する場合は、例で示したロジックを使用できません。これは、1 つの行が 1 つの列内に複数の値を持つことができないためです。

一般的な解決策は、この行グループに対して集計を使用し、チェックを通過する行があるかどうかを HAVING チェックで条件を CASE に移動することです。

たとえば、2番目の選択、

(code = 40660 or code = 40900) and not code = 41180

に簡略化できます

(code in (40660, 40900)) and code <> 41180

HAVING に翻訳:

SELECT grpcol
FROM tab
GROUP BY grpcol
HAVING 
   -- any row with a code 40660 or 40900 --> result > 0 --> TRUE
  SUM(CASE WHEN code IN (40660, 40900) THEN 1 ELSE 0 END) > 0
AND  
  -- any row with code 41180 --> result > 0 --> FALSE
  SUM(CASE WHEN code <> 41180 THEN 1 ELSE 0 END) = 0 
于 2013-09-19T09:48:15.517 に答える