作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个连接多个表的查询,一个表 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/
我是一名优秀的程序员,十分优秀!