2014-03-13 45 views
2

我做了一些研究,如查詢數字範圍,間隔查詢和更多,但沒有答案給了我正確的結果。對於確切的整數範圍的MySQL

爲了簡單起見,我將把信息不使用ID,數據庫有一個適當的模式,但我想創建一個查詢來獲取適合確切整數範圍的數據。

我有這個表,但是這個信息是短澄清我的問題:

+------+------+--------+---------------+ 
| year | make | model | motor   | 
+------+------+--------+---------------+ 
| 1998 | Audi | A3  | 4 Cil 1.8 Lts | 
| 1999 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2000 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2001 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2002 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2003 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2004 | Audi | A3  | 4 Cil 1.8 Lts | 
| 2004 | Audi | A3  | 4 Cil 2.0 Lts | 
| 2005 | Audi | A3  | 4 Cil 2.0 Lts | 
+------+------+--------+---------------+ 

比如我想獲得一個適合1998年的電機 - 2004年範圍內(4個齊爾1.8 LTS),但此查詢給予我也齊爾4個2.0廖運華

SELECT DISTINCT motor 
FROM general G 
WHERE G.year BETWEEN 1998 AND 2004 

導致表:

+---------------+ 
| motor   | 
+---------------+ 
| 4 Cil 1.8 Lts | 
| 4 Cil 2.0 Lts | 
+---------------+ 

另外我想這個查詢返回空,如果不適合與範圍完全一致,我創建了另一個查詢,試圖獲得不同的結果,但沒有奏效。

SELECT DISTINCT motor 
FROM general G 
WHERE G.year IN (1998, 2005); 

導致表:

+---------------+ 
| motor   | 
+---------------+ 
| 4 Cil 1.8 Lts | 
| 4 Cil 2.0 Lts | 
+---------------+ 

謝謝大家


更新:

我的問題是不是與品牌或型號參數有關,我米奮鬥樂與年份範圍在這個具體的例子是,如果範圍是1998年至2004年

之間結果得到這樣的結果:

+---------------+ 
| motor   | 
+---------------+ 
| 4 Cil 1.8 Lts | 
+---------------+ 

如果年份範圍是1998年至2005年間,我想獲得一個空的結果,因爲在我的表中,數據不符合這個範圍。

回答

2

它看起來像你詢問「1998年至2004年所有年份中motor列出現了什麼值?」

在您的問題中的查詢將回答一個相關的問題,即「1998年至2004年的任何年份出現motor什麼值?」

此查詢(http://sqlfiddle.com/#!2/53d6d/15/0)通過比較奧迪製造該發動機的年數與總年數來回答您的問題。

SELECT motors.years, motors.motor 
    FROM (
     SELECT COUNT(DISTINCT year) AS years, motor 
      FROM general 
     WHERE year BETWEEN 1998 AND 2004 
     GROUP BY motor 
     ) AS motors 
    JOIN (
     SELECT COUNT(DISTINCT year) AS years 
     FROM general 
     WHERE year BETWEEN 1998 AND 2004 
     ) years ON motors.years = years.years 

該查詢(http://sqlfiddle.com/#!2/53d6d/17/0)採用一種略微不同的方法,通過首先計算表中的每一引擎的生產壽命,然後日期範圍進行比較來生產範圍。

SELECT motor 
    FROM (
     SELECT MIN(year) AS firstyear, 
       MAX(year) AS lastyear, 
       motor 
      FROM general 
      GROUP BY motor 
     ) AS motors_years 
    WHERE firstyear=1998 AND lastyear=2004 
+0

Ollie你是男人......一個完美的精神的人,幫助其他與他們的問題! –

1

我想你可以添加第二個地方對電機柱條件要像4 Cil 1.8 Lts

SELECT DISTINCT motor 
FROM general G 
WHERE G.year BETWEEN 1998 AND 2004 
AND G.motor LIKE '4 Cil 1.8 Lts' 
+0

對不起,有點諷刺,但在這種情況下,爲什麼不使用查詢'SELECT'4 Cil 1.8 Lts'AS motor'?你需要知道答案以這種方式提出問題。 –

+0

這可能是一個更好的解決方案 – Fabio

+0

是的,其實我想獲得我不知道的電機... –

-1

你的WHERE語句可能需要更具體:

SELECT DISTINCT motor 
FROM general G 
WHERE 
    G.year BETWEEN 1998 AND 2004 
    and make = 'Audi' 
    and model = 'A3'