Declaração SQL usando a cláusula em que os valores são múltiplos

tenho uma tabela que tem várias linhas com os seguintes campos:

PersonName SongName Status

quero usar os nomes seleccionados de uma lista de selecção múltipla, que posso obter os valores, e depois fazer uma cláusula onde para mostrar os nomes das músicas que as pessoas seleccionadas podem tocar, pelo que o estado está completo.

por exemplo:

 PersonName      SongName    Status 
 Holly           Highland    Complete
 Holly           Mech        Complete 
 Ryan            Highland    Complete
Se eu seleccionar a Holly e o Ryan da lista e carregar no botão, a consulta deve mostrar ao Highland, pois é isso que ambos querem. saber.

 30
sql
Author: dckuehn, 2012-04-04

3 answers

Tenta isto:

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

O número no Ter deve corresponder à quantidade de pessoas. Se também necessitar que o Estado seja Complete use esta cláusula where em vez da anterior:

where personName in ('Ryan', 'Holly') and status = 'Complete'
 56
Author: Mosty Mostacho, 2012-04-04 14:11:07
SELECT PersonName, songName, status
FROM table
WHERE name IN ('Holly', 'Ryan')

Se estiver a utilizar o procedimento de armazenamento parametrizado:

  1. passar em cadeia separada por vírgulas
  2. usar uma função especial para dividir o texto separado por vírgulas na variável valor da tabela
  3. usar INNER JOIN ON t.PersonName = newTable.PersonName usando uma variável da tabela que contém os nomes passados
 8
Author: sll, 2012-04-04 14:54:50
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')
 0
Author: Sam DeHaan, 2012-04-04 14:09:25