2014-08-27 50 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);