mySQL UPDATE有两个JOINS和两个SET字段

时间:2018-01-26 16:34:18

标签: php mysql

我现在已经挖了三天试图解决这个问题,但是我找不到任何至少可以理解的信息,这些信息与这个特定的实例有关。

我有一个更新数据库的PHP页面,运行时没有报告错误。以下查询设置了sp表中的revelInvIDtmp_inv1列,但它未设置sprevelSku列中的{ {1}}表。

product

我也尝试过:

UPDATE shopifyProd sp
JOIN product prod ON prod.sku = sp.varSku 
JOIN tmp_inv1 inv ON inv.sku = sp.varSku
SET sp.revelSku = prod.sku, sp.revelInvID = inv.invID;

以及许多其他可怕的错误和失败的方式。内连接,外连接,左连接,交叉眼和许多眼泪。我一直在phpMyAdmin以及我的php页面中测试它们,但无济于事。

我手头的主要问题是我需要构建另一个查询,它将类似但有三个或四个连接。我是否只需要运行多个查询才能使其正常工作?每个加入/设置一个?

2 个答案:

答案 0 :(得分:0)

当您像这样加入时,mysql只接受product和tmp_inv1表中的第一个sku而忽略其余的。有可能是shopifyProd从每个sku的第一行得到的错误值。

你可以在下面的sql小提琴中看到这个例子。

http://sqlfiddle.com/#!9/c361b5/1

我借用了Barmar的小提琴,它更清洁了 http://www.sqlfiddle.com/#!9/2d3212/1/0

关键是你不能加入非唯一列,否则结果是不可预测的。

答案 1 :(得分:0)

如果表格可能不包含SKU的匹配项,则需要使用LEFT JOIN

UPDATE shopifyProd sp
JOIN product prod ON prod.sku = sp.varSku 
LEFT JOIN tmp_inv1 inv ON inv.sku = sp.varSku
SET sp.revelSku = prod.sku, sp.revelInvID = inv.invID;