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
)

我想获得所有设置了两个特定选项的用户,但前提是它们都设置了。

例如,这将返回设置了任何选项的用户:

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

如何让它返回表中有两个条目(用于标志 1 和 2)的所有用户Options

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 回答