我现在已经挖了三天试图解决这个问题,但是我找不到任何至少可以理解的信息,这些信息与这个特定的实例有关。
我有一个更新数据库的PHP页面,运行时没有报告错误。以下查询设置了sp
表中的revelInvID
。tmp_inv1
列,但它未设置sp
。revelSku
列中的{ {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页面中测试它们,但无济于事。
我手头的主要问题是我需要构建另一个查询,它将类似但有三个或四个连接。我是否只需要运行多个查询才能使其正常工作?每个加入/设置一个?
答案 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;