0

PostageRules私はこのクエリを持っていますが、参加したいだけで、値が -1 のPostageGroups場合p.delivery

明確にするために、1 つの配信値のみが必要です。-1 の場合は、テーブルから値p.deliveryを取得する必要があります。現時点では、クエリはの値に関係なく取得しますpo.deliveryPostageRulespo.deliveryp.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   
4

2 に答える 2

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   
于 2012-10-04T13:20:35.517 に答える
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   
于 2012-10-04T13:18:55.140 に答える