我有两张桌子,
indexInfo :
[indexId] [name] [type]
101 nameA Cars
102 nameB Trucks
103 nameC Cars
userGroupXindexInfo
[usergroupnumber] [indexId]
201 101
201 103
202 102
202 103
203 103
可能有多个userGroups
分配给同一个索引,如何获得属于具有特定类型的用户组列表的唯一索引列表?
所以我想要一个从(201, 202, 203)
indexInfo
分配给用户组type = Cars
的唯一索引列表?
在这种情况下,它将是:101,103
我尝试使用左外连接,但不确定是否有更好的方法来执行此操作?
答案 0 :(得分:1)
您可以使用EXISTS
:
SELECT t.IndexId
FROM indexInfo t
WHERE t.Type='Cars'
AND EXISTS (
SELECT *
FROM userGroupXindexInfo i
WHERE t.IndexId = i.IndexId
)
第一个条件t.Type='Cars'
验证类型。第二个条件EXISTS (...)
验证索引是否已分配给组。
您可以对GROUP BY
和加入:
SELECT t.IndexId
FROM indexInfo t
JOIN userGroupXindexInfo i ON t.IndexId = i.IndexId
WHERE t.Type='Cars'
GROUP BY t.IndexId
答案 1 :(得分:1)
执行此操作的一种方法是使用in
谓词将indexId
限制为与指定组匹配的谓词:
select indexId
from indexInfo
where type = 'Cars'
and indexId in (
select indexId
from userGroupXindexInfo
where usergroupnumber in (201,202,203)
)
答案 2 :(得分:0)
使用“in”构建过滤
--- Select indexInfo
Select * from Indice
--- Filter result
where Type = 'Cars' and indexID in
---Liset In depends of Selected query
( select indexID from userGroupXindexInfo where usergroupnumber in (200,202,203))