■99160 / ) |
SQLレコード内の重複チェック |
□投稿者/ OA (1回)-(2022/02/13(Sun) 22:52:43)
|
分類:[データベース全般]
【環境】SQL Server(SSMS v18.6)
SQLについて、教えてください。
{1~N}の組み合わせを求めるのに、N個のテーブルをクロス結合しました。
こちらは、簡単にできたのですが、今度は順列を求めようと以下のSQLを考えたのですが、
{1~4}、{1~5}と組み合わせが増えるとWHERE句が冗長な表現になります。
WHERE句を、もっと簡単な表現で書けないでしょうか?
{1~3}(↓のTable1)なら
SELECT * FROM Table1 WHERE A<>B AND A<>C AND B<>C ORDER BY A, B, C
このWHERE句が
{1~4}なら
WHERE A<>B AND A<>C AND A<>D AND B<>C AND B<>D AND C<>D
{1~5}なら
WHERE A<>B AND A<>C AND A<>D AND A<>E AND B<>C AND B<>D AND B<>E AND C<>D AND C<>E AND D<>E
と爆発的に増加する。
以下は{1,2,3}の組み合わせ27通りのテーブル(Table1)です。
この中から順列の6通り(○印)を抽出する。
(要はレコード内に1つでも重複があれば抽出しない。)
Table1
A B C
├─┼─┼─┤
│ 1│ 1│ 1│
├─┼─┼─┤
│ 1│ 1│ 2│
├─┼─┼─┤
│ 1│ 1│ 3│
├─┼─┼─┤
│ 1│ 2│ 1│
├─┼─┼─┤
│ 1│ 2│ 2│
├─┼─┼─┤
│ 1│ 2│ 3│○
├─┼─┼─┤
│ 1│ 3│ 1│
├─┼─┼─┤
│ 1│ 3│ 2│○
├─┼─┼─┤
│ 1│ 3│ 3│
├─┼─┼─┤
│ 2│ 1│ 1│
├─┼─┼─┤
│ 2│ 1│ 2│
├─┼─┼─┤
│ 2│ 1│ 3│○
├─┼─┼─┤
│ 2│ 2│ 1│
├─┼─┼─┤
│ 2│ 2│ 2│
├─┼─┼─┤
│ 2│ 2│ 3│
├─┼─┼─┤
│ 2│ 3│ 1│○
├─┼─┼─┤
│ 2│ 3│ 2│
├─┼─┼─┤
│ 2│ 3│ 3│
├─┼─┼─┤
│ 3│ 1│ 1│
├─┼─┼─┤
│ 3│ 1│ 2│○
├─┼─┼─┤
│ 3│ 1│ 3│
├─┼─┼─┤
│ 3│ 2│ 1│○
├─┼─┼─┤
│ 3│ 2│ 2│
├─┼─┼─┤
│ 3│ 2│ 3│
├─┼─┼─┤
│ 3│ 3│ 1│
├─┼─┼─┤
│ 3│ 3│ 2│
├─┼─┼─┤
│ 3│ 3│ 3│
└─┴─┴─┘
|
|