Проверка состояния элемента в master-detail в MSSQL - PullRequest
0 голосов
/ 04 мая 2011

У меня есть три таблицы, а именно:

  • Product
  • ProductVariant
  • SizeVariant

Product является основной таблицей, productvariant - это его дочерняя таблица, а sizevariant - это дочерняя таблица productvariant.

Все эти таблицы имеют столбец состояния, который указывает, являются ли они живыми или нет.Я хочу проверить, есть ли какие-либо продукты, чьи productvariants и sizevariants status мертвы, но сам product жив.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

есть ли продукты, чей статус productvariants и sizevariants мертв, но сам продукт жив

SELECT P1.product_ID
  FROM Products AS P1
INTERSECT
SELECT V1.product_ID
  FROM productvariants AS V1        
 WHERE V1.status = 'Dead'
INTERSECT 
SELECT V1.product_ID
  FROM productvariants AS V1        
       INNER JOIN sizevariants AS S1
         ON V1.product_variant_ID = S1.product_variant_ID
 WHERE S1.status = 'Dead';

В качестве альтернативы (предупреждение: может показаться излишне сложным):

SELECT P1.product_ID
  FROM Products AS P1
 WHERE P1.status = 'Alive'
       AND EXISTS (
                   SELECT * 
                     FROM productvariants AS V1        
                    WHERE P1.product_ID = V1.product_ID            
                          AND V1.status = 'Dead'
                  )
       AND EXISTS (
                   SELECT *
                     FROM sizevariants AS S1
                          INNER JOIN productvariants AS V1
                             ON V1.product_variant_ID = S1.product_variant_ID
                    WHERE P1.product_ID = V1.product_ID            
                          AND S1.status = 'Dead'
                  );
1 голос
/ 04 мая 2011
select *
from product p
where p.status = 'alive' 
  and not exists (select 1 
                  from   productvariant 
                  where  productid = p.id 
                    and  status='alive')

должен принести вам все продукты, которые не имеют «живой» вариант.следуя той же формуле, вы также можете проверить варианты товара без каких-либо «живых» вариантов размера:

select *
from productvariant pv
where p.status = 'alive'  
  not exists (select 1 
              from   sizevariant 
              where  productvariantid = pv.id 
                and  status='alive')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...