0

重複の可能性:
複数の結合されたテーブル値が選択基準を満たす行を選択する方法は?

Usersテーブルと、各Optonsユーザーのいくつかのオプションを含むテーブルがあります。各ユーザーは、複数のオプションを選択できます。

テーブルは次のようになります。

-- this is where user names are stored
create table Users 
(
    ID int, 
    UserName varchar(255)
)

-- this table contains options 
-- (one flag per row)
create table Options
(
    ID NOT NULL AUTO_INCREMENT int, 
    Flag int, 
    User_ID int // foreign key
)

2 つの特定のオプションが設定されているすべてのユーザーを取得したいのですが、両方が設定されている場合に限ります。

たとえば、これはオプションのいずれかが設定されているユーザーを返します。

-- find all users with flags 1 and 2 set
select u.UserName from Users u 
    inner join Options o on o.User_ID = u.ID
    where o.Flag in (1, 2)

Optionsテーブルに 2 つのエントリ (フラグ 1 と 2) を持つすべてのユーザーを返すにはどうすればよいですか?

4

2 に答える 2

1

クエリはほぼ正しいですが、レコードのインスタンスの数を数える必要があり、where句のパラメータの数と同じである必要があります。

SELECT u.UserName 
FROM Users u 
     INNER JOIN Options o 
        ON o.User_ID = u.ID
WHERE o.Flag in (1, 2)
GROUP BY u.UserName 
HAVING COUNT(o.Flag) = 2
于 2012-09-28T15:13:10.880 に答える
1

そこに捨てるだけです:

SELECT DISTINCT u.UserName 
FROM Users u 
JOIN Options o ON u.User_ID = o.ID AND o.Flag=1
JOIN Options p ON u.User_ID = p.ID AND p.Flag=2
于 2012-09-28T15:30:17.377 に答える