Sql 编写查询以基于组中的项目获取组中的所有记录
很抱歉这个没有用的标题,但希望我能解释得足够好 假设我有三张桌子Sql 编写查询以基于组中的项目获取组中的所有记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,很抱歉这个没有用的标题,但希望我能解释得足够好 假设我有三张桌子 Item ItemKey ItemName Group GroupKey GroupItem GroupKey ItemKey 给定ItemKey,如何从item表中获取属于包含item key的组的所有记录 所以如果我有 Item 1 ItemA 2 ItemB 3 ItemC Group 1 2 3 GroupItem 1 1
Item
ItemKey
ItemName
Group
GroupKey
GroupItem
GroupKey
ItemKey
给定ItemKey,如何从item表中获取属于包含item key的组的所有记录
所以如果我有
Item
1 ItemA
2 ItemB
3 ItemC
Group
1
2
3
GroupItem
1 1
1 2
2 1
2 2
3 2
3 3
传入1将返回ItemA和ItemB,但不会返回ItemC,因为其中没有同时包含ItemA和ItemC的组
select distinct ItemName
from Item I
inner join GroupItem GI
on I.ItemKey = GI.ItemKey
where GI.GroupKey in
(select GroupKey
from GroupItem
where ItemKey = @Param)
-- @Param is the input parameter. Change for you
-- DBMS
或:
或:
您可以使用子查询
SELECT DISTINCT i.ItemName
FROM GroupItem gi JOIN
Item i ON gi.ItemKey = i.ItemKey
WHERE gi.GroupKey IN (
SELECT DISTINCT GroupKey FROM GroupItem WHERE ItemKey = @Param
)
您可以使用子查询
SELECT DISTINCT i.ItemName
FROM GroupItem gi JOIN
Item i ON gi.ItemKey = i.ItemKey
WHERE gi.GroupKey IN (
SELECT DISTINCT GroupKey FROM GroupItem WHERE ItemKey = @Param
)
如果你通过了2,你会得到ItemA,ItemB和ItemC,因为它们都在ItemB的组中?我理解正确吗?如果你通过了2,你会得到ItemA、ItemB和ItemC,因为它们都在ItemB的组中?我理解正确吗?很好,谢谢。但是,选择一种查询是否有性能优势?1)在比较备选查询的性能时,请查看实际数据上的执行计划。2) 在过去,连接通常比子查询发生得更快,但是查询优化器已经足够好了,通常会选择相同的执行计划。然后是可读性。非常好,谢谢。但是,选择一种查询是否有性能优势?1)在比较备选查询的性能时,请查看实际数据上的执行计划。2) 在过去,连接通常比子查询发生得更快,但是查询优化器已经足够好了,通常会选择相同的执行计划。然后是可读性。