Вопрос по sql – Оператор SQL с использованием предложения Where с несколькими значениями

34

У меня есть таблица, которая имеет несколько строк со следующими полями:

<code>PersonName SongName Status
</code>

Я хочу использовать имена, выбранные из списка множественного выбора, в котором я могу получить значения, а затем выполнить предложение where, чтобы показать имена песен, которые могут воспроизводить все выбранные люди, поэтому статус завершен.

Например:

<code> PersonName      SongName    Status 
 Holly           Highland    Complete
 Holly           Mech        Complete 
 Ryan            Highland    Complete
</code>

Если я выберу Холли и Райана из списка и нажму кнопку, запрос должен просто показать Хайленд, поскольку это то, что они оба знают.

ВЫБЕРИТЕ [SongName] ОТ [Learning] WHERE ([BandieName] LIKE «%» + »и« item.Text & amp; »+«% ») И ([BandieName] LIKE»; % "+", "& amp; item.Text" и "," + "%") И ([Status] LIKE "Complete") Sophie
ЕслиRyan не имеетComplete как статус, результат должен бытьHighland? Mosty Mostacho

Ваш Ответ

3   ответа
10
SELECT PersonName, songName, status
FROM table
WHERE name IN ('Holly', 'Ryan')

Pass in comma separated string Use special function to split comma separated string into table value variable Use INNER JOIN ON t.PersonName = newTable.PersonName using a table variable which contains passed in names
имя должно быть псевдонимом столбца PersonName.
@aF.edited 1 hour ago Bridge О, действительно - не заметил;)
лол, ребята ....;)
@ Мост вопрос был отредактирован oO
@aF. Вы можете понять, почему вас это смущает - в данных примера приведены имена столбцов, отличные от ранее упомянутых определений!
1
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')
Они оба в одной таблице? Sophie
@ Софи Да, это самостоятельное присоединение.
моя таблица называется Learning, что будет эквивалентно для t1 и t2? Sophie
63

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'
Это невозможно, как вы можете видеть, это обеспечивает ожидаемый результатhere с теми же данными, которые вы предоставили.
поэтому этот запрос был выполнен и дал вам ожидаемый результат, поэтому он работал правильно? Sophie
Нет, логика верна и, следовательно, результат верен: логика ясна, сначала удалите все значения, отличные от «Ryan». и «Холли», затем группировать по названию песни. Если количество различных просчитанных personNames равно двум (потому что Райану и Холли равно 2), это означает, что у Райана и Холли есть эта песня. Выполните все необходимые тесты и дайте мне знать, если вы обнаружите какую-либо ошибку в полученных результатах.
Извините, я скучаю по вашему ответу. Однако это работает очень хорошо. Спасибо! Sophie
Это не приводит к каким-либо результатам, это похоже на то, с чем я работал раньше, если вы использовали или как «holly». AND 'RYAN' тогда это не принесет результатов, если вы используете ИЛИ вместо И, это вызовет все те песни, которые имеют статус завершенного для Холли и Райана, а не только те, для которых оба Холли и Райан имеют законченные. Спасибо Sophie

Похожие вопросы