Выполните этот запрос, когда что-то не существует в другой таблице - PullRequest
1 голос
/ 28 января 2010

Это действительно сложный вопрос, потому что очень сложно объяснить, что я хочу. Здесь идет, хотя!

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

Этот запрос работает нормально и выдает все правильные данные. У меня также есть еще одна таблица под названием «StockMatrixDetail». Я хотел бы удалить все SKU из вышеуказанного запроса, когда Sku существует в столбце StockMatrixDetail.Sku. Как я могу исправить этот запрос, чтобы включить это ???

Итак, псевдо-вопрос в основном:

Выполните вышеуказанный запрос, но не включайте Skus, которые есть в таблице StockMatrixDetail, в Sku столбца.

Любая помощь с этим будет оценена.

С уважением,

Andy

1 Ответ

4 голосов
/ 28 января 2010

Я всегда делал это с помощью NOT EXISTS предложения ... очень быстро, даже более того, если StockMatrixDetail.Sku проиндексирован ... он даже не попадает в таблицу.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...