2014-08-27 44 views
0

我是SQL新手,需要结合三个SQL查询的帮助。SQL - 如何组合这三个SQL查询?

查询1

SELECT max(level) level FROM tablename WHERE id = 1 

这样做的结果是在本实施例3中,该值将在查询中使用2

查询2

SELECT max(run) run FROM tablename WHERE id = 1 AND level = 3; 

的这个例子中的结果是1,这个值将在查询3中使用。

查询3

SELECT levelpassed FROM tablename WHERE id = 1 AND level = 3 AND run = 1; 

下面是表的结构:

CREATE TABLE `tablename` (
`id` int(11) NOT NULL, 
`date` datetime NOT NULL, 
`level` int(11) NOT NULL, 
`run` int(11) NOT NULL, 
`cr` int(11) NOT NULL, 
`fr` int(11) NOT NULL, 
`dv` int(11) NOT NULL, 
`levelpassed` tinyint(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

这里是主键:

ALTER TABLE `tablename` 
ADD PRIMARY KEY (`id`,`date`); 

我需要知道的所有三个值来自查询。最大水平,最大运行和水平通过。

谢谢你的帮助!

+3

这三者的结合也不会比在单独的方式执行它们更高效。实际上,在任何DBMS引擎中,我知道你不应该把它们合并起来,因为它们有不同的“where”子句。 – evenro 2014-08-27 12:58:46

+0

请描述它的需求(在用例类型的故事中),而不是某人可能能够帮助你的需求。没有它,很难(至少对我来说)试图想象它的用例 – evenro 2014-08-27 13:03:25

+0

id/level/run是否是唯一的,最后一个查询是否总是返回一行? – 2014-08-27 13:08:08

回答

-1

尝试查询类似如下:

SELECT levelpassed , 
    (SELECT max(LEVEL) LEVEL 
    FROM tablename 
    WHERE id = 1) level, 
    (SELECT max(run) run 
    FROM tablename 
    WHERE id = 1 
    AND LEVEL = 3) run 
FROM tablename 
WHERE id = 1 
    AND LEVEL = 
    (SELECT max(LEVEL) LEVEL 
    FROM tablename 
    WHERE id = 1) 
    AND run = 
    (SELECT max(run) run 
    FROM tablename 
    WHERE id = 1 
     AND LEVEL = 3); 

其实这是非常低效的,但它应该做你所需要的。

+1

这只会给我等级的价值。我需要知道所有三个值。谢谢。 – Ragnarsson 2014-08-27 13:01:58

+0

对不起。 – Gogol 2014-08-27 13:07:06

+0

@ noc2spamÂ'LEVEL = 3'不应该被硬编码,因为'LEVEL'的值是** query 1的结果** – Karolis 2014-08-27 13:12:39

0

这是你要找的查询:

SELECT * 
FROM tablename T 
INNER JOIN (SELECT T2.id 
      ,MAX(T2.level) AS [level] 
      FROM tablename T2) TL ON TL.id = T.id 
            AND TL.level = T.level 
INNER JOIN (SELECT T3.id 
      ,MAX(T3.run) AS [run] 
      FROM tablename T3) TL ON TR.id = T.id 
            AND TR.run = T.run 
WHERE T.id = 1 

希望这将有助于您的问题。

0

您是否有查询输出的结果?

请尝试:

select levelpassed from tablename a where id = 1 and run = (select max(run) from tablename b where a.id = b.id) and level = (select max(level) from tablename c where a.id = c.id);