我的第一张表如下(不重要):
tbl_Item
ItemId,ItemName
1 ,'test'
2 ,'test2'
3 , 'test3'
和第二个表是(重要表),这个表告诉我们ItemId
有什么规格?例如,ItemId
1具有规格5和6以及7
tbl_Spec
ItemId , SpecId
1 ,5
1 ,6
1 ,7
2 ,5
2 ,8
3 ,5
3 ,7
如何选择同时具有SpecId 5和7
的项目结果必须是:
ItemId
1
3
SQL In(...)将OR作为默认值,但我需要使用And Function。
我的DBMS是SQL Server 2008
答案 0 :(得分:4)
我敢肯定必须有更优雅的方式,但这应该给你你想要的东西(编辑:根据MichaełPowaga的建议修复)。
SELECT ItemId
FROM tbl_Spec
WHERE SpecId=5 OR SpecId=7
GROUP BY ItemId
HAVING COUNT(DISTINCT SpecId)=2
P.S。阿里,如果你需要一个更容易扩展的解决方案,你看过Mikael Eriksson的答案吗?
答案 1 :(得分:3)
select itemid from
(
select itemid from tbl_spec where specid = 5
) subset1 inner join
(
select itemid from tbl_spec where itemid = 7
) subset2 on subset1.itemid = subset2.itemid
答案 2 :(得分:3)
declare @T table
(
ItemId int,
SpecId int
)
insert into @T values
(1 ,5),
(1 ,6),
(1 ,7),
(2 ,5),
(2 ,5),
(2 ,8),
(3 ,5),
(3 ,7),
(4 ,5),
(4 ,5)
;with C(SpecId) as
(
select 5 union all
select 7
)
select T.ItemId
from @T as T
inner join C
on T.SpecId = C.SpecId
group by T.ItemId
having count(distinct T.SpecId) = (select count(*) from C)
结果:
ItemId
1
3
答案 3 :(得分:0)
这将提供您所要求的所需输出,但我不能100%确定这是否是您所要求的。
select distinct itemID
from tbl_Spec
where SpecId in (5,7)
答案 4 :(得分:0)
执行以下sql查询
从tbl_Spec中选择ItemId,其中SpecId在(5,7)
中答案 5 :(得分:0)
select distinct ItemId from tbl_Item, tbl_Spec
where tbl_Item.ItemId=tbl_Spec.ItemId
and tbl_SPec.SpecId not in (select SpecId from tbl_Spec where SpecId not in (5,7))
我希望它适合你。
答案 6 :(得分:0)
select * from (select Count(ItemID)Counted from tbl_Spec where Itemid in (select Itemid from tbl_Item )and SpecId in(5,7) group by ItemID) a where Counted>=2