在更新语句中使用左连接where null

时间:2014-12-16 20:33:37

标签: c# mysql

我正在尝试使用左连接将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);

3 个答案:

答案 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-syntax of MySQL是:

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);