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

MySQL技术求助:编写查询未被出租车辆的SQL语句(执行无结果)

解决未被出租车辆的SQL查询问题

首先,咱们来拆解你现有查询里的问题:

  • 内连接的局限性:你用了FROM cars as c, rentals as r这种隐式内连接,它只会返回同时存在于Cars和Rentals表中的记录——换句话说,只有被出租过的车辆才会被筛选出来,完全没被出租过的车辆根本不会出现在结果集里。
  • NULL判断错误:SQL里判断字段是否为NULL不能用=,必须用IS NULL,不过这在你的查询里不是核心问题,因为内连接已经把无租赁记录的车提前排除了。

下面给你两种靠谱的解决方案:

方法一:使用左连接(LEFT JOIN)

左连接会保留Cars表的所有记录,再匹配Rentals表中的对应记录,没有匹配到的租赁字段会显示为NULL,我们可以利用这一点筛选未被出租的车辆:

SELECT c.car_id, c.car_name, c.car_type
FROM cars AS c
LEFT JOIN rentals AS r ON c.car_id = r.car_id
WHERE r.rental_id IS NULL  -- 用r.car_id IS NULL也能达到同样效果
ORDER BY c.car_id;

方法二:使用NOT EXISTS子查询

这个方法逻辑更直观:找出所有在Cars表中,但从未出现在Rentals表的车辆:

SELECT c.car_id, c.car_name, c.car_type
FROM cars AS c
WHERE NOT EXISTS (
    SELECT 1
    FROM rentals AS r
    WHERE r.car_id = c.car_id
)
ORDER BY c.car_id;

补充说明:如果你的需求是找当前未被出租的车辆(即有过租赁记录但当前没有在租状态),那需要Rentals表额外包含归还日期字段,但根据你给出的表结构,这里默认按「从未被出租过」的场景来解决啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:42:41