2013-01-11 78 views
3

我有一個名爲'A到G'的列名爲'Alphabets'的表。檢索滿足給定七個條件中至少四個條件的行

Table Name: Alphabets 

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

現在,我需要一個SQL查詢,從至少滿足四個標準從以下列表中的表中檢索所有行:

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

我使用Oracle 10g數據庫。

+0

你可以編輯你的文章,並說你在哪個數據庫工作?該信息的查詢可能會略有不同。 – Vargan

+0

@ppeterka:我無法想到這麼做。 – venki

+0

@Bagatin:已添加。我正在使用Oracle 10g。 – venki

回答

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 

但一些有關此表和查詢似乎嫌疑 - 這感覺就像它應該是兩列,LetterValue說的表。

5

一個醜陋的解決方案,我能想到的(我敢肯定,必須有更好的解決方案,但是這個應該工作,雖然我不說服了它是任何意義上的最佳...)

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 

這有問題:

  • 不能很好地擴展 - 新的約束 - 在查詢新的行...
  • 性能方面它是不是最佳
  • 也只是普通的可怕醜陋