Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 减去两个查询的结果_Sql_Database_Ms Access_Database Design - Fatal编程技术网

Sql 减去两个查询的结果

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,

我有一个数据库,其中一个查询告诉我每个特定房间总共有多少钥匙,另一个查询指示每个特定房间当前注销了多少钥匙。我想创建第三个查询,指示每个房间现在有多少可用房间

访问文件:

查询1(每个房间的钥匙)

查询2(KPR Signedout)

这是查询1和查询2的结果。如果FY218房间总共有8把钥匙,当前有2把钥匙已注销。我可以把我的疑问结合起来告诉我这个房间还有6把钥匙吗。如果不是,我如何才能得到这个结果

以下是我的表格和关系:


您可以使用子查询,如下所示:

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