【发布时间】:2009-11-03 09:10:43
【问题描述】:
我有 3 张桌子 - 项目, 道具, Items_To_Props
我需要返回与我发送的所有属性匹配的所有项目 例子
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
【问题讨论】:
标签: sql-server join sql-server-2000
我有 3 张桌子 - 项目, 道具, Items_To_Props
我需要返回与我发送的所有属性匹配的所有项目 例子
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
【问题讨论】:
标签: sql-server join sql-server-2000
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)
【讨论】:
T2 只得到 1 行是正确的,T1 应该得到 3 行
【讨论】: