获取需要满足多个外部表条件的表行

时间:2012-09-28 15:10:57

标签: sql sql-server foreign-keys

  

可能重复:
  How to select rows where multiple joined table values meet selection criteria?

我有一个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)

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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