如何缩短此MySQL查询?

Sch*_*iss 0 php mysql sql

在这里,

反正有没有缩短这个MySQL查询??? 它需要根据它的价格规则从名为RuleValue的列中的PriceRuleDetail表中获取两个不同的行,但是使用别名,将它们返回到同一行.它在select语句中使用子查询,我认为是正确的,但可能有一种更简单的方法吗?

以下工作正常,我很满意它,但我想知道是否有一种方法使这更短?

SELECT Stock.*, 
    (SELECT PriceRuleDetail.RuleValue
    FROM PriceRuleDetail
    WHERE PriceRuleDetail.Sku = Stock.Sku
    AND PriceRuleDetail.PriceRule = 'RG'
    AND PriceRuleDetail.Quantity = 1) as Price,
    (SELECT PriceRuleDetail.RuleValue
    FROM PriceRuleDetail
    WHERE PriceRuleDetail.Sku = Stock.Sku
    AND PriceRuleDetail.PriceRule = 'RRP'
    AND PriceRuleDetail.Quantity = 1) as WasPrice
FROM Stock, StockCategoryMemberList
WHERE StockCategoryMemberList.Sku = Stock.Sku
AND StockCategoryMemberList.CategoryCode = 'FIRE'
Run Code Online (Sandbox Code Playgroud)

提前致谢.

安迪

Căt*_*tiș 6

使用连接使其成为单个查询:

SELECT
   Stock.*, 
   PRD1.RuleValue as Price, 
   PRD2.RuleValue as WasPrice
FROM 
   Stock, 
   StockCategoryMemberList, 
   PriceRuleDetail PRD1, 
   PriceRuleDetail PRD2
WHERE
StockCategoryMemberList.Sku = Stock.Sku
AND StockCategoryMemberList.CategoryCode = 'FIRE'
AND PRD1.Sku = Stock.Sku
    AND PRD1.PriceRule = 'RG'
    AND PRD1.Quantity = 1
AND
    PRD2.Sku = Stock.Sku
    AND PRD2.PriceRule = 'RRP'
    AND PRD2.Quantity = 1
Run Code Online (Sandbox Code Playgroud)

我做了同样的假设(对于一个股票记录,只有一个价格,只有一个WasPrice).如果不是这样的话......查询将无法正常进行.也不是你的.