如何构造sql查询以下情况?

时间:2015-03-18 14:11:03

标签: sql

我有两张桌子,

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

我尝试使用左外连接,但不确定是否有更好的方法来执行此操作?

3 个答案:

答案 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))