使用JOIN匹配第一个结果

时间:2012-02-06 15:30:10

标签: php mysql join left-join

我正在尝试从我的第二个表上的DiscountMarkupPriceRate1字段获取价格以在PHP中显示。

我的查询的第一部分提取了我需要的所有内容,Parentsku所有带库存的可见产品。即GTR101。

我正在尝试将其加入第二个表格,并仅检索父级的第一个DiscountMarkupPriceRate1(GTR101%)ItemCustomerPriceLevelM

这是我的桌子的样子。这基本上是我在查询的前半部分之前的结果(剥离了我需要的所有其他字段):

**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
    )

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'