如何合并两个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
相关产品推荐
相关产品推荐

