You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个SQL查询,筛选出未租赁或已归还的article记录?

问题:筛选空闲租赁物品的SQL合并方案

我有用于记录租赁信息的article表和used表,需要筛选出空闲物品——也就是从未被租赁(来自article表)或已归还(来自used表)的物品。目前我有两个可正常运行的独立SQL查询:

第一个查询(返回已归还的物品,共25条记录):

SELECT      a.article_id, a.mark, a.type, a.description
FROM        article a
INNER JOIN  used u ON u.article_id = a.article_id
WHERE       return_date IS NOT NULL

第二个查询(返回从未被租赁的物品,共113条记录):

SELECT      article_id, mark, type
FROM        article
WHERE       NOT EXISTS
            (SELECT *
            FROM used
            WHERE article.article_id = used.article_id)

我期望合并这两个查询的结果,得到总计138条记录,请问该怎么实现?

解决方案

你可以用UNION ALL直接拼接两个查询的结果,但要保证两个结果集的列数、列类型一致——第一个查询包含description列,第二个没有,所以需要给第二个查询补上这个列,用NULL填充即可。

合并后的完整SQL如下:

-- 已归还的物品
SELECT      a.article_id, a.mark, a.type, a.description
FROM        article a
INNER JOIN  used u ON u.article_id = a.article_id
WHERE       return_date IS NOT NULL
UNION ALL
-- 从未被租赁的物品
SELECT      article_id, mark, type, NULL AS description
FROM        article
WHERE       NOT EXISTS
            (SELECT *
            FROM used
            WHERE article.article_id = used.article_id)

补充说明:

  • UNION ALL会直接拼接两个结果集,不会做去重操作,刚好满足你25+113=138条记录的需求
  • 如果第一个查询可能返回同一物品的多条记录(比如某物品被多次租赁并归还),而你希望每个物品只显示一次,可以把UNION ALL换成UNION,它会自动去重,但最终结果数可能少于138,根据实际业务需求选择即可

内容的提问来源于stack exchange,提问作者Mathie88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:50:38