可能重复:
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)的所有用户?
答案 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