34

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

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

PersonName SongName Status

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

Например:

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

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

  • Нет, логика верна и, следовательно, результат верен: логика ясна, сначала удалите все значения, отличные от «Ryan». и «Холли», затем группировать по названию песни. Если количество различных просчитанных personNames равно двум (потому что Райану и Холли равно 2), это означает, что у Райана и Холли есть эта песня. Выполните все необходимые тесты и дайте мне знать, если вы обнаружите какую-либо ошибку в полученных результатах.

    от
  • моя таблица называется Learning, что будет эквивалентно для t1 и t2?

    от Sophie
  • имя должно быть псевдонимом столбца PersonName.

    от
  • @ Софи Да, это самостоятельное присоединение.

    от
  • @aF. Вы можете понять, почему вас это смущает - в данных примера приведены имена столбцов, отличные от ранее упомянутых определений!

    от
  • Это невозможно, как вы можете видеть, это обеспечивает ожидаемый результатhere с теми же данными, которые вы предоставили.

    от
  • поэтому этот запрос был выполнен и дал вам ожидаемый результат, поэтому он работал правильно?

    от Sophie
  • @aF.edited 1 hour ago Bridge О, действительно - не заметил;)

    от
  • Это не приводит к каким-либо результатам, это похоже на то, с чем я работал раньше, если вы использовали или как «holly». AND 'RYAN' тогда это не принесет результатов, если вы используете ИЛИ вместо И, это вызовет все те песни, которые имеют статус завершенного для Холли и Райана, а не только те, для которых оба Холли и Райан имеют законченные. Спасибо

    от Sophie
  • Извините, я скучаю по вашему ответу. Однако это работает очень хорошо. Спасибо!

    от Sophie
  • лол, ребята ....;)

    от
  • @ Мост вопрос был отредактирован oO

    от
  • Они оба в одной таблице?

    от Sophie
  • от
  • ВЫБЕРИТЕ [SongName] ОТ [Learning] WHERE ([BandieName] LIKE «%» + »и« item.Text & amp; »+«% ») И ([BandieName] LIKE»; % "+", "& amp; item.Text" и "," + "%") И ([Status] LIKE "Complete")

    от Sophie
  • ЕслиRyan не имеетComplete как статус, результат должен бытьHighland?

    от Mosty Mostacho
  • 1

    Code:

    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')
    

  • 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'
    

  • 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