使用LEFT JOIN更新pdo php mysql

3
我希望同时更新多个表,因此我使用了LEFT JOIN来创建一个单独的UPDATE查询。我尝试了两种方法来进行LEFT JOIN,但都失败了。我不知道自己哪里出错了,所以希望有人能够仔细分析这个查询并指出错误。
我已经对查询应用了一些格式化,使其比以前更易读:
首先是:
"UPDATE "
.
"table1 AS t1 SET t1.Bid = :id "
.
"LEFT JOIN table2 AS t2 SET t2.id = :id ON t1.Bid = t2.id AND t1.status = t2.status "
.
"LEFT JOIN table3 AS t3 SET t3.Bid = :id ON t1.Bid = t3.Bid AND t1.status = t3.status "
.
"LEFT JOIN table4 AS t4 SET t4.id = :id ON t1.Bid = t4.id AND t1.status = t4.status "
.
"LEFT JOIN table5 AS t5 SET t5.Bid = :id ON t1.Bid = t5.Bid AND t1.status = t5.status "
.
"LEFT JOIN table6 AS t6 SET t6.id = :id ON t1.Bid = t6.id AND t1.status = t6.status "
.
"LEFT JOIN table7 AS t7 SET t7.Bid = :id ON t1.Bid = t7.Bid AND t1.status = t7.status "
.
"LEFT JOIN table8 AS t8 SET t8.id = :id ON t1.Bid = t8.id AND t1.status = t8.status "

.
"WHERE t1.Bid = :oldid AND t1.status = :status "

第二个是:
$stmt = $dbh - > prepare("UPDATE "
    .
    "table1 AS t1 "
    .
    "LEFT JOIN table2 AS t2 ON t1.Bid = t2.id AND t1.status = t2.status "
    .
    "LEFT JOIN table3 AS t3 ON t1.Bid = t3.Bid AND t1.status = t3.status "
    .
    "LEFT JOIN table4 AS t4 ON t1.Bid = t4.id AND t1.status = t4.status "
    .
    "LEFT JOIN table5 AS t5 ON t1.Bid = t5.Bid AND t1.status = t5.status "
    .
    "LEFT JOIN table6 AS t6 ON t1.Bid = t6.id AND t1.status = t6.status "
    .
    "LEFT JOIN table7 AS t7 ON t1.Bid = t7.Bid AND t1.status = t7.status "
    .
    "LEFT JOIN table8 AS t8 ON t1.Bid = t8.id AND t1.status = t8.status "
    .
    " SET t1.Bid = :id, "
    .
    " SET t2.id = :id, "
    .
    " SET t3.Bid = :id, "
    .
    " SET t4.id = :id, "
    .
    " SET t5.Bid = :id, "
    .
    " SET t6.id = :id, "
    .
    " SET t7.Bid = :id, "
    .
    " SET t8.id = :id "

    .
    "WHERE t1.Bid = :oldid AND t1.status = :status ");

更新

我正在使用第一种选项,但是出现了以下错误:

致命错误:Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:语法错误或访问违规:1064 您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册以获取正确的语法,位于行1附近的“LEFT JOIN table2 AS t2 SET t2.id ='315-512-613-12'”'

第二个选项得到:

致命错误:Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:语法错误或访问违规:1064 您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册以获取正确的语法,位于行1附近的“SET t2.id ='315-512-613-123V',SET t3.Bid ='315-512-613-123V',SE'”


1
йӮЈд№Ҳй—®йўҳеҮәеңЁе“ӘйҮҢе‘ўпјҹиҜ·еҢ…жӢ¬дёӨдёӘиҜ·жұӮзҡ„йў„жңҹе’Ңе®һйҷ…з»“жһңгҖӮжҲ‘зӣёдҝЎжӣҙж–°еӨҡдёӘиЎЁзҡ„MysqlиҜӯжі•жҳҜUPDATE t1, t2, t3 SET t1.field1=value1, t2.field2=value2 ... WHERE t1.pk=t2.fk ...гҖӮ - Alex Blex
执行查询时,请检查MySQL返回的错误。 - Jocelyn
@AlexBlex 我期望它能够更新,但是我得到了错误..我会检查这个错误并在更新时粘贴它..我不需要使用左连接,这就是你的意思吗?但是如果特定ID在表中不存在,那么它将不会被更新。这就是我使用 LEFT JOIN 的原因之一。 - guradio
1个回答

1

我使用这个查询使其正常工作。

"UPDATE 
    table1 AS t1 LEFT JOIN
    table2 AS t2 ON t1.Bid = t2.id AND t1.status = t2.status LEFT JOIN
    table3 AS t3 ON t1.Bid = t3.Bid AND t1.status = t3.status LEFT JOIN
    table4 AS t4 ON t1.Bid = t4.id AND t1.status = t4.status LEFT JOIN
    table5 AS t5 ON t1.Bid = t5.Bid AND t1.status = t5.status LEFT JOIN
    table6 AS t6 ON t1.Bid = t6.id AND t1.status = t6.status LEFT JOIN
    table7 AS t7 ON t1.Bid = t7.Bid AND t1.status = t7.status LEFT JOIN
    table7 AS t8 ON t1.Bid = t8.id AND t1.status = t8.status
    SET t1.Bid = :id,
        t2.id = :id,
        t3.Bid = :id,
        t4.id = :id,
        t5.Bid = :id,
        t6.id = :id,
        t7.Bid = :id,
        t8.id = :id
    WHERE t1.Bid = :oldid
    AND t1.status = :status "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接