在更新语句中使用左连接,其中为 null

本文关键字:null 连接 更新 语句 | 更新日期: 2023-09-27 18:34:21

当预订表中找不到匹配项时,我正在尝试使用左联接将 plot.jobs 行设置为 0(支票为 plot.plot_id = booking.plot_id)。

但是,我不断收到以下错误消息:

发生类型为"MySql.Data.MySqlClient.MySqlException"的异常 在 MySql.Data 中.dll但未在用户代码中处理 其他 信息:您的 SQL 语法有误;查看手册 与您的MySQL服务器版本相对应,语法正确 在'从地块左加入预订plot.plot_id = booking.plot_id 1 号线的 plot.plot_id 号位置。

我在这里遵循这个模板:

UPDATE <Table2>
SET Count = 0 
FROM <Table2>
LEFT JOIN <Table1>
    ON <Table2>.<JoinColumn> = <Table1>.<JoinColumn>
WHERE <Table1>.<JoinColumn> IS NULL

这是我到目前为止的代码:

query =     "UPDATE plot SET jobs = @jobCount WHERE plot_id = @plotID AND postcode='MK';";
query +=    "UPDATE plot " +
            "SET jobs = 0 " +
            "FROM plot " +
            "LEFT JOIN booking " +
            "ON plot.plot_id = booking.plot_id " +
            "WHERE plot.plot_id IS NULL";
cmd =       new MySqlCommand(query, _connection);

在更新语句中使用左连接,其中为 null

您正在尝试将SQL Server语法用于MySQL上的UPDATE语句。这行不通。

MySQL 的UPDATE语法是:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

其中table_reference是用JOIN语法定义的。

您的查询应如下所示:

query +=    "UPDATE plot " +
            "LEFT JOIN booking " +
            "ON plot.plot_id = booking.plot_id " +
            "SET jobs = 0 " +
            "WHERE plot.plot_id IS NULL";

我想知道你是否不是说:WHERE booking.plot_id IS NULL

你的语法不太适合MySQL。 在SET之前先做LEFT JOIN

这样的东西应该可以工作(注意:这还没有经过测试)。

query +=    "UPDATE plot p" +
            "LEFT JOIN booking b" +
            "ON p.plot_id = b.plot_id " +
            "SET jobs = 0 " +
            "WHERE p.plot_id IS NULL";

您正在尝试更新绘图表设置作业等于零,当 plot_id 为 null 时?在这种情况下,加入的意义何在?您正在尝试基于似乎非常无效的空值联接记录,并且您没有将联接的表预订用于任何内容。我建议删除连接,并且 from 语句在 Saggio 提到的更新中无效。

query = "UPDATE plot SET jobs = @jobCount WHERE plot_id = @plotID AND postcode='MK';";
query +="UPDATE plot " +
        "SET jobs = 0 " +
        "LEFT JOIN booking ON plot.plot_id = booking.plot_id" +
        "WHERE booking.plot_id IS NULL;";
cmd =   new MySqlCommand(query, _connection);