我有一个由两个表组成的规范化sql db,让我们称之为<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod> <!-- Add this -->
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
和Users
,每个用户都有很多车,每辆车都属于一个用户,现在我想要获得欠两个(或更多)特定型号汽车的所有用户,伪:Cars
,
这可以让所有拥有每个型号汽车的用户:
select all users (join cars) that owe car model X and car model Y
但我想只获得拥有这两款车的用户,我尝试使用("""SELECT * FROM users use
JOIN cars car ON use.user_id = car.user_id
WHERE (car.model = 'X' AND car.maker = 'XX')
OR (car.model = 'Y' AND car.maker = 'YY');""")
代替AND
,但这并不会返回任何结果
答案 0 :(得分:1)
您可以通过执行以下操作获取用户ID:
SELECT c.user_id
FROM cars c
WHERE (c.model, c.maker) in ( ('X', 'XX'), ('Y', 'YY') )
GROUP BY c.user_id
HAVING COUNT(DISTINCT c.model) = 2;
您可以使用join
,in
或exists
来提供有关用户的更多信息。
此语法使用in
为您的逻辑使用简写。当然,明确的and
/ or
逻辑也可以。
答案 1 :(得分:1)
select
u.*
from
users u
where
exists (select 1 from cars c where c.maker = "Ford" and c.model='Mustang' and u.id =
c.user_id)
and exists (select 1 from cars c where c.maker = "Chevy" and c.model='Camaro' and u.id =
c.user_id)