我正在尝试从我的第二个表上的DiscountMarkupPriceRate1
字段获取价格以在PHP中显示。
我的查询的第一部分提取了我需要的所有内容,Parentsku
所有带库存的可见产品。即GTR101。
我正在尝试将其加入第二个表格,并仅检索父级的第一个DiscountMarkupPriceRate1
(GTR101%)ItemCustomerPriceLevel
为M
。
这是我的桌子的样子。这基本上是我在查询的前半部分之前的结果(剥离了我需要的所有其他字段):
**INVENTORY**
SKU store_quantity parent_sku visible
----------------------------------------------------------------
GTR101 20 NULL Y
GTR102 100 NULL Y
GTR103 88 NULL Y
这是第二张表:
**ins_imb_1**
DiscountMarkupPriceRate1 ItemNumber ItemCustomerPriceLevel
-----------------------------------------------------------------
15.950 GTR101S M
15.950 GTR101M M
11.950 GTR101L M
10.000 GTR101S T
我想要
GTR101 15.95
以下是我查询的内容:
Select *
from INVENTORY
where parent_sku=''
AND store_quantity > 0
AND SKU like '%GTR%'
AND visible='Y'
LEFT JOIN ins_imb_1
ON ins_imb_1.ItemNumber =
(
SELECT ItemNumber, ItemCustomerPriceLevel, DiscountMarkupPriceRate1
FROM ins_imb_1
WHERE ins_imb_1.ItemNumber% = INVENTORY.SKU
AND ins_imb_1.ItemCustomerPriceLevel = 'M'
ORDER BY
INVENTORY.SKU
LIMIT 1
)
答案 0 :(得分:1)
我在这里看到的第一件事是,JOIN
需要在FROM语句之后和WHERE之前。
LEFT JOIN中的子查询也是错误的。
LEFT JOIN ins_imb_1
ON ins_imb_1.ItemNumber =
(
SELECT ItemNumber, ItemCustomerPriceLevel, DiscountMarkupPriceRate1
您的子查询应该只返回一个字段(以便与ins_imb_1.ItemNumber
进行比较)。
我不知道你是否需要这里的子查询,你可以这样做:
LEFT JOIN ins_imb_1
ON ins_imb_1.ItemNumber LIKE CONCAT(INVENTORY.SKU, '%')
AND ins_imb_1.ItemCustomerPriceLevel = 'M'
我也看到一些可以在这里优化的东西。
where parent_sku=''
应为where parent_sku IS NULL
。
AND SKU like '%GTR%'
应为AND SKU like 'GTR%'
(因为SKU始终以'GTR'开头)。
SELECT *
FROM INVENTORY
LEFT JOIN ins_imb_1
ON ins_imb_1.ItemNumber LIKE CONCAT(INVENTORY.SKU, '%')
AND ins_imb_1.ItemCustomerPriceLevel = 'M'
WHERE parent_sku IS NULL
AND store_quantity > 0
AND SKU LIKE 'GTR%'
AND visible = 'Y'