54

我有一个包含多行的表,其中包含以下字段:

PersonName SongName Status

我想使用从多选列表框中选择的名称,我可以检索这些值,然后执行 where 子句,以便显示所选人员都可以播放的歌曲名称,因此状态已完成。

例如:

 PersonName      SongName    Status 
 Holly           Highland    Complete
 Holly           Mech        Complete 
 Ryan            Highland    Complete

如果我从列表框中选择 Holly 和 Ryan 并按下按钮,查询应该只显示 Highland,因为这是他们都知道的。

4

3 回答 3

93

试试这个:

select songName from t
where personName in ('Ryan', 'Holly')
group by songName
having count(distinct personName) = 2

拥有的人数应与人数相匹配。如果您还需要 Status 以Complete使用此where子句而不是上一个子句:

where personName in ('Ryan', 'Holly') and status = 'Complete'
于 2012-04-04T14:11:07.630 回答
15
SELECT PersonName, songName, status
FROM table
WHERE name IN ('Holly', 'Ryan')

如果您使用参数化存储过程:

  1. 传入逗号分隔的字符串
  2. 使用特殊函数将逗号分隔的字符串拆分为表值变量
  3. 使用INNER JOIN ON t.PersonName = newTable.PersonName包含传入名称的表变量
于 2012-04-04T14:04:43.213 回答
2
Select t1.SongName
From tablename t1
left join tablename t2
 on t1.SongName = t2.SongName
    and t1.PersonName <> t2.PersonName
    and t1.Status = 'Complete' -- my assumption that this is necessary
    and t2.Status = 'Complete' -- my assumption that this is necessary
    and t1.PersonName IN ('Holly', 'Ryan')
    and t2.PersonName IN ('Holly', 'Ryan')
于 2012-04-04T14:09:25.303 回答