2010-01-15 154 views
0

我试图让这个查询工作:SQL查询不产生任何结果

SELECT Stock.*, 
     StockFeatures.Features, 
     StockDescriptions.Detailed, 
     StockDescriptions.Technical, 
     PRD1.RuleValue as Price, 
     PRD2.RuleValue as WasPrice, 
     PRD2.RuleValue-PRD1.RuleValue as Save, 
     PRD1.Quantity 
FROM 
    StockFeatures, Stock INNER JOIN 
    PriceRuleDetail PRD1 ON PRD1.Sku = Stock.Sku 
     AND PRD1.PriceRule = 'RG' LEFT JOIN 
    PriceRuleDetail PRD2 ON PRD2.Sku = Stock.Sku 
     AND PRD2.PriceRule = 'RRP' LEFT JOIN 
    StockDescriptions ON StockDescriptions.Sku = Stock.Sku 
WHERE Stock.GeneralStkStatus < 3 
AND Stock.Sku = '11044' 
AND StockFeatures.Sku = Stock.Sku 
ORDER BY PRD1.Quantity ASC 

它时,没有一个StockFeatures.Features行的StockFeatures表不返回任何结果 - 这也经常不会是。我该如何使它只在该表中没有任何内容时才会出现NULL值?

该表具有Sku和特征(Sku应与Stock.Sku列链接)列。

任何帮助,将不胜感激。

在此先感谢。

+1

我很抱歉,但如果没有StockFeature(如你所说,它可能为空),你想加入该怎么行Stock.Sku ?????或者你只是想要一整行的空值? – gbianchi 2010-01-15 15:25:49

回答

7

您需要LEFT JOINStockFeatures

例如:(未经测试)

SELECT Stock.*, 
     StockFeatures.Features, 
     StockDescriptions.Detailed, 
     StockDescriptions.Technical, 
     PRD1.RuleValue as Price, 
     PRD2.RuleValue as WasPrice, 
     PRD2.RuleValue-PRD1.RuleValue as Save, 
     PRD1.Quantity 
FROM 
    Stock LEFT JOIN 
    StockFeatures ON Stock.Sku = StockFeatures.Sku INNER JOIN 
    PriceRuleDetail PRD1 ON PRD1.Sku = Stock.Sku 
     AND PRD1.PriceRule = 'RG' LEFT JOIN 
    PriceRuleDetail PRD2 ON PRD2.Sku = Stock.Sku 
     AND PRD2.PriceRule = 'RRP' LEFT JOIN 
    StockDescriptions ON StockDescriptions.Sku = Stock.Sku 
WHERE Stock.GeneralStkStatus < 3 
AND Stock.Sku = '11044' 
ORDER BY PRD1.Quantity ASC 
+0

你能举个例子吗?我试过这样做,但它似乎每次都会出错!对SQL来说很新颖:(。干杯。 – Schodemeiss 2010-01-15 15:23:14

+2

你会得到什么错误? – 2010-01-15 15:25:53

+1

这个答案绝对是完美的。非常感谢你! – Schodemeiss 2010-01-15 15:29:40