2012-01-04 78 views
6

我有一個表有minmax列。我想搜索一組數字在minmax之間的行。例如:我有一組(3, 4, 11, 18)如何過濾2列之間的數字組?

  1. 我的查詢過濾可以看看:

    (3 between min and max) OR 
    (4 between min and max) OR 
    (11 between min and max) OR 
    (18 between min and max) 
    
  2. ,但我想知道是否有一個更好的類似的方式:

    (3,4,11,12) between min and max 
    

    會做一些類似#1

我需要這個因爲該設置可以在不同的搜索之間切換。任何幫助或建議表示讚賞。

簡單上下文中的表是class(classid,classname,minage,maxage)。有成千上萬的課程 - 所以我得到網絡請求搜索具有特定年齡段的課程,例如(3,4,11,12),其中用戶正在搜索年齡3,4,11和12的課程。

目前我的查詢如下: SELECT * FROM所在班級((3最小值和最大值之間)或(4最小值和最大值)之間的最小值和最大值)或(11最小值和最大值之間)或(18間)

+0

您能否將您的數字集合插入臨時表中,並使用合適的where子句將其連接到您的範圍表上? – 2012-01-04 13:45:23

+1

你可以發表你想要的表結構和例子嗎? – Benoit 2012-01-04 13:45:53

+1

RWTF命名列'min'和'max'。這會讓只有理智的讀者感到困惑。請添加您的表格定義和一段數據以說明您打算如何操作。 – wildplasser 2012-01-04 13:51:08

回答

0

我們如果您可以通過發佈表格架構來添加更多信息,將能夠更好地爲您提供幫助。但是,這個示例查詢可能會給你一些提示。

示例查詢:

SELECT SampleValue, ColB, ColC FROM TableName WHERE SampleValue in (1,2,3)

+0

我有編輯我的帖子給我的表格樣本。什麼是sampleValue在這裏? – chan 2012-01-05 12:40:50

2

喜歡的東西

SELECT * 
    FROM MyTable AS T 
WHERE EXISTS (
       SELECT * 
       FROM MySet AS S 
       WHERE S.val BETWEEN T.my_min AND T.my_max 
      ); 
+0

感謝您的迴應,這看起來不錯,但我怎樣才能形成MySet?它可以作爲查詢的一部分來完成嗎? – chan 2012-01-05 12:43:02

0

另一種方法是先創建一個表(一次),並與所有可能的年齡填充它(從1到101) :

CREATE TABLE Age 
(allowed TINYINT 
, PRIMARY KEY (allowed) 
) ; 

INSERT INTO Age 
    VALUES 
    (1), (2), (3), ... (101) ; 

在您的搜索查詢中使用此:

SELECT * 
FROM Class 
WHERE EXISTS 
     (SELECT * 
     FROM Age 
     WHERE Age.allowed BETWEEN Class.minage AND Class.maxage 
      AND Age.allowed IN (3, 4, 11, 18) 
    ) 
+0

不,我不能創建一個表格,除非它可以在查詢內完成。 – chan 2012-01-05 14:07:04