Sql 减去两个查询的结果
我有一个数据库,其中一个查询告诉我每个特定房间总共有多少钥匙,另一个查询指示每个特定房间当前注销了多少钥匙。我想创建第三个查询,指示每个房间现在有多少可用房间 访问文件: 查询1(每个房间的钥匙) 查询2(KPR Signedout) 这是查询1和查询2的结果。如果FY218房间总共有8把钥匙,当前有2把钥匙已注销。我可以把我的疑问结合起来告诉我这个房间还有6把钥匙吗。如果不是,我如何才能得到这个结果 以下是我的表格和关系:Sql 减去两个查询的结果,sql,database,ms-access,database-design,Sql,Database,Ms Access,Database Design,我有一个数据库,其中一个查询告诉我每个特定房间总共有多少钥匙,另一个查询指示每个特定房间当前注销了多少钥匙。我想创建第三个查询,指示每个房间现在有多少可用房间 访问文件: 查询1(每个房间的钥匙) 查询2(KPR Signedout) 这是查询1和查询2的结果。如果FY218房间总共有8把钥匙,当前有2把钥匙已注销。我可以把我的疑问结合起来告诉我这个房间还有6把钥匙吗。如果不是,我如何才能得到这个结果 以下是我的表格和关系: 您可以使用子查询,如下所示: SELECT r.room_name,
您可以使用子查询,如下所示:
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
这应该是您想要的:
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
可用的
的定义是什么?
?根据您的查询方式是错误的,即第一个应该是:选择r.room\u名称,将(k.key\u id)作为key\u count FROM key AS k internal JOIN rooms AS r ON r.room\u id=k.room\u id按r.room\u name顺序按2 DESC分组
,第二个选择r.room\u name,Count(k.key\u id)作为key\u Count从rooms作为r内部连接键作为k ON r.room\u id=k.room\u id内部连接签名作为s ON k.key\u id=s.key\u id,其中s.[返回日期]为空,按r.room\u name顺序按2 DESC分组代码>可用是指每个房间总共有多少把钥匙。我应该重写可能会让人困惑的OP。我无法理解你的问题,你能更正式地表述它吗?对不起,我会编辑OP使其更清晰。这样做的结果不符合逻辑。这是我得到的结果,它将剩余24个键相加,但表中只有9个已注销键和50个键,因此剩余键应为41个。如果嵌套的select k.key_id为k2.key_id,则查询不会返回任何值。
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
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