我正在尝试使用左连接将plot.jobs行设置为0,如果在预订表中找不到匹配项(检查是plot.plot_id = booking.plot_id)。
但是我不断收到以下错误消息:
发生了'MySql.Data.MySqlClient.MySqlException'类型的异常 在MySql.Data.dll中但未在用户代码中处理 信息:您的SQL语法中有错误;检查手册 对应于您的MySQL服务器版本,以获得正确的语法 在'FROM plot LEFT JOIN预订附近使用plot.plot_id = booking.plot_id WHERE plot.plot_id'在第1行。
我在这里关注此模板:
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);
答案 0 :(得分:1)
您的语法对MySQL来说并不合适。在LEFT JOIN
SET
这样的事情应该有用(注意:这还没有经过测试)。
query += "UPDATE plot p" +
"LEFT JOIN booking b" +
"ON p.plot_id = b.plot_id " +
"SET jobs = 0 " +
"WHERE p.plot_id IS NULL";
答案 1 :(得分:1)
您正在尝试在MySQL上使用UPDATE
语句的SQL Server语法。这不起作用。
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
使用JOIN
-syntax定义table_reference
。
您的查询应该是:
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
答案 2 :(得分:0)
当plot_id为null时,您是否尝试将绘图表设置作业更新为零?在这种情况下加入的重点是什么?您正在尝试基于空值来加入记录,该值似乎非常无效,并且您没有使用已连接的表格预订。我建议删除连接,并且在Saggio提到的更新中,from语句无效。
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);