MySQL用于精确整数范围

时间:2014-03-13 23:57:12

标签: mysql sql

我做了一些研究,比如查询数值范围,区间查询等等,但没有一个答案给我正确的结果。

为简单起见,我将在不使用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 Cil 1.8 Lts)的电机,但这个查询也给我4 Cil 2.0 Lts

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年之间,我想获得一个空结果,因为在我的表格中,数据与此范围不完全吻合。

3 个答案:

答案 0 :(得分:2)

看起来你要问的问题是motor列的哪些值出现在1998年到2004年的所有年份?"

您的问题中的查询回答了一个相关的问题,即{... 1}}在1998年至2004年的任何一年中出现了什么价值?"

此查询(http://sqlfiddle.com/#!2/53d6d/15/0)通过比较奥迪制造该引擎的年数与总年数来回答您的问题。

motor

此查询(http://sqlfiddle.com/#!2/53d6d/17/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

答案 1 :(得分: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'

答案 2 :(得分:-1)

您的WHERE语句可能需要更具体:

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