在更新语句中使用左连接,其中为 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);
您正在尝试将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);