2012-10-04 29 views
0

我有這個疑問,但我只想加盟PostageRulesPostageGroups如果p.delivery具有-1SQL服務器選擇查詢 - 條件JOIN

值爲了澄清,我只想要一個交貨值,如果p.delivery是 - 1,那麼我們需要從PostageRules表中獲得po.delivery的值。目前查詢獲得po.delivery,無論p.delivery

的值是否可以在單個查詢中實現?

SELECT 
    p.id as prod_id, p.delivery as delivery, 
    po.delivery AS delivery 
FROM 
    products AS p 
LEFT JOIN 
    PostageRules AS po ON p.shopkeeper = po.shopkeeper 
LEFT JOIN 
    PostageGroups AS pg ON po.groupID = pg.id 
     AND po.minQty <= 1 
     AND po.maxQty >= 1 
     AND po.minPrice <= p.Price 
     AND po.maxPrice >= p.Price 
     AND po.minWeight <= p.weight 
     AND po.maxWeight >= p.weight     
WHERE 
    (p.id = '32323') 
ORDER BY 
    po.preference 

回答

2
SELECT p.id as prod_id, ISNULL(po.delivery, p.delivery) AS delivery 
    FROM products AS p 
    LEFT JOIN PostageRules AS po ON p.shopkeeper = po.shopkeeper and p.delivery = -1 
    LEFT JOIN PostageGroups AS pg ON po.groupID = pg.id and p.delivery = -1 
    AND po.minQty <= 1 
    AND po.maxQty >= 1 
    AND po.minPrice <= p.Price 
    AND po.maxPrice >= p.Price 
    AND po.minWeight <= p.weight 
    AND po.maxWeight >= p.weight     
    WHERE (p.id = '32323') ORDER BY po.preference 
0

試試這個:

SELECT p.id as prod_id, p.delivery as delivery, CASE WHEN p.delivery=-1 then po.delivery else null end AS delivery 
     FROM products AS p 
     LEFT JOIN PostageRules AS po ON p.shopkeeper = po.shopkeeper 
     LEFT JOIN PostageGroups AS pg ON po.groupID = pg.id 
     AND po.minQty <= 1 
     AND po.maxQty >= 1 
     AND po.minPrice <= p.Price 
     AND po.maxPrice >= p.Price 
     AND po.minWeight <= p.weight 
     AND po.maxWeight >= p.weight     
     WHERE (p.id = '32323') ORDER BY po.preference