我的第一张桌子如下(不重要):

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

===============>>#1 票数:4 已采纳

我确定必须有更优雅的方法,但这应该可以为您提供所需的信息(编辑:根据MichaełPowaga的建议进行了修正)。

SELECT ItemId
FROM tbl_Spec
WHERE SpecId=5 OR SpecId=7
GROUP BY ItemId
HAVING COUNT(DISTINCT SpecId)=2

ps Ali,如果您需要一个更容易扩展的解决方案,您是否看到了Mikael Eriksson的答案?

===============>>#2 票数: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

===============>>#3 票数: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

===============>>#4 票数:0

这将提供您所需的期望输出,但是我不确定100%是否是您所要的。

select distinct itemID
from tbl_Spec
where SpecId in (5,7)

===============>>#5 票数:0

执行以下SQL查询

从tbl_Spec中选择ItemId,其中(5,7)中的SpecId

===============>>#6 票数: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))

我希望这个对你有用。

===============>>#7 票数: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

  ask by AliRezza translate from so

未解决问题?本站智能推荐:

2回复

使用映射表SQL Server从两个表中选择单行

我有三个表:Table1,Table2,Table1Table2Mapping。 每个tabel1数据在tabel1中有多个数据,这个table1关系表2是通过映射表完成的,table1的主键和table2放在映射表中。 Table1 : Table2 : Table
1回复

SQL Server 2008,通过从不共享相同列信息的两个不同表中选择两个列来获取新表

这个问题是基于 SELECT语句中的SQL 2008 R2 CTE语法错误 在SQL Server 2008上,我需要通过从两个不同的表中选择两个列来获取一个新表。 假设id_num只有65和36两个值。 CTE没有“地址”列。 another_table没有id_num
4回复

从两个表中选择特定的列

假设我有两个表tblEmployee和tblEmpSalary 。 我需要编写一条SQL语句以获取所有雇员的名单,这些雇员的姓名和工资在每个部门中薪水最高。 样本表数据在这里:
1回复

从两个表中选择并设置空列

我有两张桌子 时间表: 和 雇员: 我想从基于ScheduleDate的两个表中进行选择,并从Employee表中显示驱动程序全名,并显示空列。 结果应为: 我用了: 如果“ scheduleDate ='2015-05-20'”效果很好
1回复

使用与其他表的水平关系从两个表中选择多个值

所有专家 请原谅我为主题,我无法找出其他任何可以解释该情况的东西。 我正在使用一个旧数据库,其中存在很多糟糕的数据库问题。 表结构 表:品牌 id名称muId(LpMap表LpID,其余四个相同)Mid Wid Bid Gid 表:LpMap LpId名称关联
1回复

两个表之间的Sql枢轴

表1(Resv) 注意: ResvID(int identity) , ResvDateTime(datetime) 表2(缓冲区) 注意: BufferInd(int) , BufferPeriod(int) 我想在SQL视图中使用pivot和下面两个结果将这两个表
2回复

从两个具有左联接的表中选择带有“最小日期”的不同记录

我正在尝试检索所有不同的AccountId以及每个的最早的InsertDate。 有时,AccountId是未知的,尽管交易可能不同,但我想将所有的“ -1”存储到自己的组中。 到目前为止,这是我与模式一起尝试过的。 表模式如下所示: 这将是一个中间表,输出计划如附件所示
2回复

如何从两个不同的表(A,B)中选择列,其中总和(列表A)小于columntableB

我可以选择价格(总和(税)小于价格)的价格,我正在执行查询,但出现错误
1回复

从SQL Server表中选择@variable [重复]

这个问题已经在这里有了答案: 使用动态SQL通过向简单的SQL查询中添加变量来指定列名 2个答案 请帮助我,我正在尝试这样做: 这里RoleID是列名tblRole ,但我越来越喜欢这样的结果: 如何以这种方式从sql表读取适当的数据?
16回复

如何在SQL中选择表的最后一条记录?

这是一个示例代码,用于从表中选择所有记录。 有人可以告诉我如何选择该表的最后一条记录吗? 当我使用时: SELECT * FROM TABLE ORDER BY ID DESC LIMIT我收到此错误:第1行:“ LIMIT”附近的语法不正确。 这是我使用的代码: