我做了一些研究,比如查询数值范围,区间查询等等,但没有一个答案给我正确的结果。
为简单起见,我将在不使用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年之间,我想获得一个空结果,因为在我的表格中,数据与此范围不完全吻合。
答案 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'