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

SQLite3 基于多表关联查询结果更新车辆预订状态的实现方法

SQLite + Laravel 多表关联更新实现方案

你原写法的核心问题有两个:

  1. UPDATE关键字后未指定需要更新的目标表vehicle
  2. SQLite不支持你所用的多表逗号分隔后跟FROM的写法,需调整为符合SQLite语法规范的格式

原生SQL正确写法

兼容全版本SQLite(EXISTS子查询方案,推荐优先用)

UPDATE vehicle
SET is_booked = 0
WHERE EXISTS (
    SELECT 1 FROM booking
    WHERE booking.vehicle_rego = vehicle.rego
      AND booking.client_drivers_license_number = 123456789
);

SQLite 3.33.0及以上版本支持的JOIN写法

UPDATE vehicle
SET is_booked = 0
FROM booking
WHERE booking.vehicle_rego = vehicle.rego
  AND booking.client_drivers_license_number = 123456789;

Laravel 项目中实现代码

1. 原生执行(性能最优,避免语法兼容问题)

使用参数绑定避免SQL注入风险:

$clientLicense = '123456789';
\DB::statement("
    UPDATE vehicle
    SET is_booked = 0
    WHERE EXISTS (
        SELECT 1 FROM booking
        WHERE booking.vehicle_rego = vehicle.rego
          AND booking.client_drivers_license_number = ?
    )
", [$clientLicense]);

2. 查询构造器写法(更贴合Laravel编码规范)

$clientLicense = '123456789';
\DB::table('vehicle')
    ->whereExists(function ($query) use ($clientLicense) {
        $query->from('booking')
              ->whereColumn('booking.vehicle_rego', 'vehicle.rego')
              ->where('booking.client_drivers_license_number', $clientLicense);
    })
    ->update(['is_booked' => 0]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:02