MySQL左连接和OR

时间:2016-12-14 18:44:18

标签: mysql

我的数据库中有三个表:

(1)orders(2)mastersku(3)inventory

基本逻辑orders进来,引用mastersku表,并在inventory表中的适当skus中插入新的数量级别。

订单表:

enter image description here

mastersku表:

enter image description here

库存表:

enter image description here

正如您在mastersku表格中看到的,一些sku有多个skus。我的逻辑是,如果SKU有多个SKU,MultSKU的值为1(并且AltSKU为NULL,SKU_1,SKU_2等中的skus不同)

这是我当前的查询:

SELECT
  Inventory.id,
  Inventory.SKU AS inventory_sku,
  Inventory.Quantity AS inventory_quantity,
    MasterSKU.SKU_1,
    MasterSKU.SKU_2,
    MasterSKU.SKU_3,
    MasterSKU.SKU_4,
    MasterSKU.SKU_5,
    MasterSKU.MultSKU,
    MasterSKU.QtySKU,
    MasterSKU.AltSKU,
    MasterSKU.SKU,
      Orders.Quantity AS sold_quantity,
      Orders.SKU AS sold_sku
FROM Orders
  LEFT OUTER JOIN mastersku
    ON Orders.SKU = MasterSKU.SKU
  LEFT OUTER JOIN inventory
    ON MasterSKU.AltSKU = Inventory.SKU
    OR MasterSKU.SKU_1 = Inventory.SKU
GROUP BY Orders.SKU

这导致

enter image description here

同样,如果我将OR MasterSKU.SKU_1 = Inventory.SKU更改为OR MasterSKU.SKU_2 = Inventory.SKU

我得到了预期的结果。

enter image description here

我需要做的是,并且正在努力争取正确的时间,将两个查询结合起来。像

这样的东西
LEFT OUTER JOIN inventory
ON MasterSKU.AltSKU = Inventory.SKU
OR MasterSKU.SKU_1 = Inventory.SKU
AND OR MasterSKU.SKU_2 = Inventory.SKU
AND OR MasterSKU.SKU_3 = Inventory.SKU

(但显然这不是正确的语法..)

获得所需的结果......(这种便宜的油漆复制+粘贴)

enter image description here

我在PHP工作,但这是我第一次使用自己设计的MySQL数据库做一个重大项目。有什么帮助吗?如果它有帮助,这里有一点SQLFiddle:http://sqlfiddle.com/#!9/f4fd2/4

1 个答案:

答案 0 :(得分:1)

您可以列出IN列表中的列:

LEFT OUTER JOIN inventory
ON Inventory.SKU IN (MasterSKU.AltSKU, MasterSKU.SKU_1, MasterSKU.SKU_2, MasterSKU.SKU_3, MasterSKU.SKU_4, MasterSKU.SKU_5)

DEMO