2016-03-17 62 views
0

https://screenshot.googleplex.com/j4igYFL9sjH 找到打印機廠商也生產具有最低的RAM容量,並具有最低的RAM容量所有PC的最高處理器速度的電腦。 結果集:製造商。錯誤的子查詢在我的SQL查詢

我的查詢:

SELECT maker FROM Product WHERE type ='Printer' AND model IN(SELECT DISTINCT(model), hd, ram FROM PC 
         WHERE hd = (
           SELECT MAX(hd) FROM PC 
            WHERE model IN(SELECT DISTINCT(model) FROM PC 
                     WHERE ram <=(SELECT MIN(ram) FROM PC)))); 

原來有這沒有廠商名單。我認爲子查詢有問題。

+0

請提供樣本數據和預期的結果......有沒有辦法,你需要所有這些子查詢...此外,該數據庫你正在使用 - 這可能會影響答案。 – sgeddes

+0

http://sql-ex.ru/help/select13.php#db_1 –

+0

這裏:'WHERE type ='打印機'AND模型'你需要找到一個製造商,而不是一個模型,所以它應該是:'WHERE type ='打印機'AND製造商IN ...' – cha

回答

0

問題

  1. 沒有保證PC maker與給定的類別還生產printers..current查詢沒有預料到,因此它可以返回指出

  2. 當前子查詢不足以解決問題,整個查詢不起作用,因爲子查詢返回最小RAM,最大處理器,最大硬盤和其他任何PC的在product ..所以它永遠不會找到任何匹配..

解決方案

  1. 翻轉查詢,以便在主查詢成爲子查詢,反之亦然,所以子查詢是關於讓所有打印機maker
  2. 一旦翻轉,讓PC,打印機maker的任何條件很容易,只要使用order by ..

這個代碼婁返回打印機maker也使PC的代碼最大hd和最小ram

SELECT maker FROM product A INNER JOIN PC B ON A.model = B.model 
WHERE maker IN (SELECT DISTINCT maker FROM product WHERE type = 'printer') 
ORDER BY hd DESC, ram ASC 
LIMIT 1 
0

這裏是我的回答,希望能對你有所幫助

SELECT distinct maker FROM product WHERE type = 'printer' 
AND maker IN (SELECT maker 
FROM product JOIN ( 
SELECT model, speed, ram FROM pc WHERE speed = 
       (SELECT MAX(speed) FROM pc 
       WHERE ram = (SELECT MIN(ram) FROM pc) 
       ) 
      AND ram = (SELECT MIN(ram) FROM pc) 
      ) b 
ON product.model = b.model) 

使用:

SELECT model, speed, ram FROM pc WHERE speed = 
(SELECT MAX(speed) FROM pc 
WHERE ram = (SELECT MIN(ram) FROM pc)) 

你確信它會返回任何與100 速度假設你有模型1,2,3,它們的速度都是100,但他們的公羊是不同的,它會返回所有三個型號,而實際上只是模型1具有最低的內存。所以,你要添加

AND ram = (SELECT MIN(ram) FROM pc) 

作爲附加條件,以確保對RAM的要求,當你把模型使用PC標準不會消失。

+0

我認爲這個問題真的是triki,因爲真的讀到這樣的問題:「生產具有最低RAM容量和所有PC的最高處理器速度的PC」我理解得到最低RAM所有的同時最高的處理器可以表述爲:'其中ram =(從pc選擇min(ram)) 和speed =(從pc選擇max(速度)),然後不檢索結果。 – Sam

3

我真的不喜歡這個問題,因爲它是如此含糊措辭。希望這將節省別人我只是通過搞清楚什麼被要求去頭痛:

SELECT DISTINCT maker FROM Product WHERE type = 'printer' AND maker IN 
    (SELECT maker FROM Product WHERE model IN ( 
     SELECT model FROM Pc 
      WHERE ram = (SELECT MIN(ram) FROM PC) 
      AND speed = (SELECT MAX(speed) FROM 
      (SELECT speed FROM Pc WHERE 
       ram = (SELECT MIN(ram) FROM Pc)) as z4) 
      ) 
)