2013-01-12 122 views
0

我有一個查詢數據庫,告訴我每個特定房間總共有多少個按鍵,另一個指示每個特定房間當前登出多少個按鍵。我想創建第三個查詢,指出每個房間現在有多少個可用。減去兩個查詢的結果

訪問文件:http://jumpshare.com/b/k7pEg4

查詢1(每間鍵)

SELECT r.room_name, count(r.room_id) AS Key_Count 
FROM keys AS k 
INNER JOIN rooms AS r ON r.room_id = k.room_id 
GROUP BY r.room_id, r.room_name 
ORDER BY 2 DESC; 

查詢2(KPR Signedout)

SELECT r.room_name, Count(r.room_id) AS Key_Count 
FROM rooms AS r 
INNER JOIN (keys AS k 
INNER JOIN signin AS s ON k.key_id = s.key_id) ON r.room_id = k.room_id 
WHERE (((s.[return_date]) Is Null)) 
GROUP BY r.room_name, r.room_id 
ORDER BY 2 DESC; 

這是從查詢1和2.如果結果FY218室有8個總鑰匙和2個鑰匙目前已註銷。我可以結合我的查詢來告訴我這個房間還有6把鑰匙嗎?如果不是我怎麼能得到這個結果。

enter image description here

這是我的表和關係:

enter image description here

+0

'available'的定義是什麼? – remigio

+0

順便說一句,你的查詢是錯誤的,即第一個應該是:'SELECT r.room_name,count(k.key_id)AS Key_Count FROM keys AS k INNER JOIN rooms AS r ON r.room_id = k.room_id GROUP BY r.room_name ORDER BY 2 DESC;',和第二個'SELECT r.room_name,Count(k.key_id)AS Key_Count FROM rooms AS r INNER JOIN keys AS k ON r.room_id = k.room_id INNER JOIN signin AS s ON k.key_id = s.key_id WHERE s。[return_date]爲空 GROUP BY r.room_name ORDER BY 2 DESC;' – remigio

+0

可用我指的是每個房間總共有多少把鑰匙。我應該重新說明可能會令人困惑的OP。 – Batman

回答

2

這應該是你想要什麼:

SELECT r.room_name, Count(k.key_id) AS Key_Count 
FROM rooms AS r 
INNER JOIN keys AS k ON r.room_id = k.room_id 
WHERE k.key_id NOT IN (
    SELECT k2.key_id 
    FROM keys AS k2 
    INNER JOIN signin AS s ON k2.key_id = s.key_id 
    WHERE s.[return_date] Is Null) 
GROUP BY r.room_name 
ORDER BY 2 DESC 
+0

嵌套select k.key_id是否爲k2.key_id 該查詢未返回任何值。 – Batman

+0

是的,我修復了它,它的工作原理和加起來。謝謝。 – Batman

+0

是的,這是我的錯字,更正! – remigio

0

你可以使用子查詢,例如:

SELECT 
r.room_name, 
Count(*) - 
(
    SELECT Count(*) 
    FROM keys AS k2 
    INNER JOIN signin s2 
    ON s2.key_id = k2.key_id 
    WHERE r.room_id = k2.room_id 
) AS AvailableKeys 
FROM rooms AS r 
LEFT JOIN keys AS k 
ON r.room_id = k.room_id 
GROUP BY r.room_name, r.room_id 
+0

從這個結果不加起來。這是得到http://jumpshare.com/v/mITRHc?b=77pEFd 它的結果剩餘24個密鑰,但只有9個註銷和表中總共50個,因此其餘密鑰應該是41. – Batman