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

持ち物の数は、人数と一致する必要があります。ステータスも必要な場合は、前の句の代わりに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 に答える