3

「AからG」までの名前の列を持つ「アルファベット」と呼ばれるテーブルがあります。

Table Name: Alphabets

Column Names: A | B | C | D | E | F | G  

ここで、次のリストから少なくとも 4 つの基準を満たすテーブルからすべての行を取得する SQL クエリが必要です。

A = 1   
B = 2  
C = 3  
D = 4  
E = 5  
F = 6
G = 7

Oracle 10g データベースを使用しています。

4

2 に答える 2

8
SELECT * FROM Alphabets where
CASE WHEN A=1 THEN 1 ELSE 0 END +
CASE WHEN B=2 THEN 1 ELSE 0 END +
CASE WHEN C=3 THEN 1 ELSE 0 END +
CASE WHEN D=4 THEN 1 ELSE 0 END +
CASE WHEN E=5 THEN 1 ELSE 0 END +
CASE WHEN F=6 THEN 1 ELSE 0 END +
CASE WHEN G=7 THEN 1 ELSE 0 END >= 4

しかし、このテーブルとクエリに関する何かが疑わしいようです。実際には 2 列のテーブルである必要があるように感じLetterますValue

于 2013-01-11T08:48:03.503 に答える
5

私が考えることができる1つの醜い解決策(より良い解決策があるに違いないと確信していますが、これはうまくいくはずですが、それが何らかの意味で最適であるとは確信していません...)

SELECT * 
FROM Alphabets
WHERE
CASE WHEN A=1 THEN 1 ELSE 0 END + 
CASE WHEN B=2 THEN 1 ELSE 0 END + 
CASE WHEN C=3 THEN 1 ELSE 0 END + 
CASE WHEN D=4 THEN 1 ELSE 0 END + 
CASE WHEN E=5 THEN 1 ELSE 0 END + 
CASE WHEN F=6 THEN 1 ELSE 0 END + 
CASE WHEN G=7 THEN 1 ELSE 0 END BETWEEN 4 AND 7

これには問題があります:

  • スケーリングがうまくいかない - 新しい制約 - クエリの新しい行...
  • パフォーマンスに関しては最適ではありません
  • また、ひどく醜いだけです
于 2013-01-11T08:48:32.117 に答える