Заявление SQL с использованием предложения Where с несколькими значениями
У меня есть таблица с несколькими строками со следующими полями:
PersonName SongName Status
Я хочу использовать имена, выбранные из нескольких списков выбора, которые я могу получить из значений, а затем сделать предложение where, чтобы он показывал имена песен, которые могут выбрать выбранные люди, поэтому статус завершен.
Например:
PersonName SongName Status
Holly Highland Complete
Holly Mech Complete
Ryan Highland Complete
Если я выберу Холли и Райана из списка и нажмите кнопку, запрос должен просто показать Хайленд, так как это то, что они оба знают.
Ответы
Ответ 1
Попробуйте следующее:
select songName from t
where personName in ('Ryan', 'Holly')
group by songName
having count(distinct personName) = 2
Число в наличии должно соответствовать количеству людей. Если вам также нужен статус Complete
, используйте это предложение where
вместо предыдущего:
where personName in ('Ryan', 'Holly') and status = 'Complete'
Ответ 2
SELECT PersonName, songName, status
FROM table
WHERE name IN ('Holly', 'Ryan')
Если вы используете параметризованную хранимую процедуру:
- Пропустить строку с разделителями-запятыми
- Используйте специальную функцию для разделения строки, разделенной запятыми, на переменную значения таблицы
- Используйте
INNER JOIN ON t.PersonName = newTable.PersonName
, используя переменную таблицы, которая содержит переданные имена
Ответ 3
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')