特定の複数のcol2値のcol1値を取得しようとしています。例:col2の「1、2、3、4」値(つまり、col1の「1」)のcol1値を確認したい。別の例:col2の「1、2」のcol1値は「1、2」です。SQL構文でこれを行うにはどうすればよいですか?
3 に答える
あなたが欲しいものは関係除算と呼ばれています。それを達成するためのいくつかの方法があります。同様の問題に対する10以上の異なる解決策があるこの質問を確認してください-ベンチマークを含む:SQLの結果をフィルタリングする方法
(col1, col2)
方法の1つは次のとおりです(組み合わせが一意であると想定しています)。
SELECT col1
FROM tableX
WHERE col2 IN (1, 2, 3, 4)
GROUP BY col1
HAVING COUNT(*) = 4 --- the size of the above list
そして別の:
SELECT t1.col1
FROM tableX AS t1
JOIN
tableX AS t2
ON t2.col1 = t1.col1
AND t2.col2 = 2
JOIN
tableX AS t3
ON t3.col1 = t1.col1
AND t3.col2 = 3
JOIN
tableX AS t4
ON t4.col1 = t1.col1
AND t4.col2 = 4
WHERE t1.col2 = 1
おそらくこれは役立つかもしれません:
SELECT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')
col2
これにより、「1」、「2」、「3」、または「4」のいずれかであるすべての行が返されます。
つまり、あなたの例のように、上記のクエリは
col1
---------
1
1
1
1
2
2
DISTINCT
句を追加すると、個別のcol1値のみが取得されます。
SELECT DISTINCT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')
戻ります
col1
---------
1
2
あなたの例では。
SQLで説明していることを行うことはできません。あなたのコメントから判断すると:
col2に「1,2,3,4」が「必須」であるcol1値を表示したいと思います。この例では、col1の「1」の値は「1,2,3,4」であり、col1の「1」の値はcol2に「1,2」しか含まれていないため、このステートメントでは、結果としてcol1の「1」の値のみが表示されます。 。ただし、col1の「2」値も示します。
シーケンスが重要だと思います。各行はデータセット内のどこにあるかに基づいて一意ではないため、SQLを使用して単純に行うことはできません。データセットにプログラミング言語(C、java、phpなど)をロードし、データセットをループして、この方法でこれらのシーケンスを確認する必要があります。