2010-01-28 9 views
1

C'est une question vraiment délicate à poser car il est très difficile d'expliquer ce que je cherche. Ici va bien!Effectuez cette requête quand quelque chose n'existe pas dans une autre table

SELECT 
    Stock.*, 
    REPLACE (Description, '&', '&') as Description, 
    PRD1.RuleValue AS Price, 
    PRD2.RuleValue AS WasPrice, 
    PRD2.RuleValue-PRD1.RuleValue AS Save 
FROM 
    Stock INNER JOIN 
    StockCategoryMemberList ON StockCategoryMemberList.Sku = Stock.Sku LEFT JOIN 
    PriceRuleDetail PRD1 ON PRD1.Sku = Stock.Sku 
     AND PRD1.PriceRule = 'RG' 
     AND PRD1.Quantity = 1 LEFT JOIN 
    PriceRuleDetail PRD2 ON PRD2.Sku = Stock.Sku 
     AND PRD2.PriceRule = 'RRP' 
     AND PRD2.Quantity = 1 
WHERE StockCategoryMemberList.CategoryCode = 'FIRE' 
AND Stock.GeneralStkStatus < 3 
ORDER BY StockCategoryMemberList.Order ASC 

Cette requête fonctionne correctement et produit toutes les données correctes. J'ai aussi une autre table appelée "StockMatrixDetail". Je souhaite supprimer toutes les références de la requête ci-dessus lorsque le référentiel existe dans la colonne StockMatrixDetail.Sku. Comment puis-je réparer cette requête ci-dessus pour inclure cela ???

Ainsi, la question pseudo est essentiellement:

Réalise la requête ci-dessus, mais ne comprennent pas SKUS qui sont dans la table StockMatrixDetail, dans la colonne Sku.

Toute aide avec ceci serait appréciée.

Cordialement,

Andy

+0

La réponse ci-dessous est mis à jour et devrait maintenant fonctionner correctement ... erreur mot-clé de ma part pris par OrbMan –

Répondre

4

Je l'ai toujours fait par une NOT EXISTS clause ... extrêmement rapide, encore plus si StockMatrixDetail.Sku est indexé ... il n'a même pas atteint la table.

SELECT 
    Stock.*, 
    REPLACE (Description, '&', '&amp;') as Description, 
    PRD1.RuleValue AS Price, 
    PRD2.RuleValue AS WasPrice, 
    PRD2.RuleValue-PRD1.RuleValue AS Save 
FROM 
    Stock INNER JOIN 
    StockCategoryMemberList ON StockCategoryMemberList.Sku = Stock.Sku LEFT JOIN 
    PriceRuleDetail PRD1 ON PRD1.Sku = Stock.Sku 
     AND PRD1.PriceRule = 'RG' 
     AND PRD1.Quantity = 1 LEFT JOIN 
    PriceRuleDetail PRD2 ON PRD2.Sku = Stock.Sku 
     AND PRD2.PriceRule = 'RRP' 
     AND PRD2.Quantity = 1 
WHERE StockCategoryMemberList.CategoryCode = 'FIRE' 
AND NOT EXISTS (SELECT 1 
        FROM StockMatrixDetail smd 
        WHERE smd.Sku = Stock.Sku) 
AND Stock.GeneralStkStatus < 3 
ORDER BY StockCategoryMemberList.Order ASC 
+0

Hiya. Merci pour cela, semble être son proche d'avoir raison, mais malheureusement, je reçois cette erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'WHERE NOT EXISTS (SELECT 1 FROM StockMatrixDetail smd WHERE smd.Sku = Stock.Sku)' à la ligne 1 – Schodemeiss

+2

changer 'WHERE NOT EXISTS' à' ET PAS EXISTS'. – RedFilter

+1

@OrbMan: Bonne prise! Fixe –

Questions connexes