2009-11-03 5 views
0

У меня есть 3 таблицы - товаров, реквизита, Items_To_Propsпроблемы с присоединиться к SQL Server 2000

мне нужно, чтобы вернуть все элементы, которые соответствуют всем свойствам, которые я отправить пример

items 
1 
2 
3 
4 

props 
T1 
T2 
T3 

items_to_props 
1 T1 
1 T2 
1 T3 
2 T1 
3 T1 

, когда я отправьте T1, T2 мне нужно получить только товар 1

ответ

0
SELECT T.itemId 
    FROM (SELECT itemId, count(distinct prop) propCount 
      FROM items_to_props 
     WHERE prop in ('T1', 'T2') 
     GROUP BY itemId) T 
WHERE T.propCount = 2 

Если вы не знаете, сколько реквизита у вас есть, вы можете создать временную таблицу #P(prop), заполнить его с реквизитом и запустить на следующие запросы (будут делать то же самое):

SELECT T.itemId 
    FROM (SELECT i.itemId, count(distinct p.prop) propCount 
      FROM items_to_props i 
      JOIN #P p on i.prop = p.prop 
     GROUP BY i.itemId) T 
WHERE T.propCount = (SELECT COUNT(DISTINCT prop) FROM #P) 
+0

, но я не знаю, сколько реквизитов У меня есть – eyalb

+0

Tnx. он отлично работает – eyalb

0

Правильно, что вы получаете только одну строку для T2, вы должны получить 3 для T1

+0

выберите пункты. * from items internal join items_to_props где t = T1 и t = T2 Я знаю, что это неправильно, но я не знаю, как получить 1 строку с элементом, который имеет 2 prpos – eyalb

Смежные вопросы