gpt4 book ai didi

php - 在 LEFT JOIN table1 ON 条件 1 OR 条件 2 中使用 OR 会导致不必要的问题吗?

转载 作者:行者123 更新时间:2023-11-29 17:57:14 27 4
gpt4 key购买 nike

我正在构建一个连接多个表的查询,一个表 prodRecipe 将包含某些行的数据,但不是全部,但是 tmp_inv1 将包含所有行的计数信息。问题是,tmp_inv1.count 取决于某个项目是否在 prodRecipe 表中。

即如果存在 prodRecipe.product,则 tmp_inv1.count 基于该产品,否则基于 product.prodID

在 JOIN 中使用 OR 似乎可以工作,并根据给出有效结果的内容进行填充,但我想知道这是否会导致我还没有看到的不需要的或灾难性的结果?

--我一时兴起尝试使用 OR,因为我一直无法找到更好的解决方案。但最重要的是它对 PHP 很友好,所以我不能使用多个或嵌套的选择查询。--

SELECT invTrack AS track, varID, varSKU, revelSku, revelInvID, p.prodID AS prodID, pr.ingredient AS ing, pr.main_product AS mainProduct, pr.product AS product, i.invID AS invC, i.count,  pr.qty AS Xply
FROM shopifyProd sp
LEFT JOIN product p ON sp.revelSku = p.sku AND p.location = 1
LEFT JOIN prodRecipe pr ON p.prodID = pr.main_product
LEFT JOIN tmp_inv1 i ON pr.product = i.prodID OR p.prodID = i.prodID
WHERE 1

最佳答案

为了避免多次匹配,您需要加入两次(每个条件一次)并选择优先匹配。

SELECT invTrack AS track, varID, varSKU, revelSku, revelInvID, p.prodID AS prodID, pr.ingredient AS ing, pr.main_product AS mainProduct, pr.product AS product
, CASE WHEN p_i.prodID IS NOT NULL THEN p_i.invID ELSE pr_i.invID END AS invC
, CASE WHEN p_i.prodID IS NOT NULL THEN p_i.count ELSE pr_i.count END AS `count`
, pr.qty AS Xply
FROM shopifyProd sp
LEFT JOIN product p ON sp.revelSku = p.sku AND p.location = 1
LEFT JOIN prodRecipe pr ON p.prodID = pr.main_product
LEFT JOIN tmp_inv1 p_i ON p.product = p_i.prodID
LEFT JOIN tmp_inv1 pr_i ON pr.product = pr_i.prodID
WHERE 1

关于php - 在 LEFT JOIN table1 ON 条件 1 OR 条件 2 中使用 OR 会导致不必要的问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48690547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com