[英]SQL - Limiting results from one table, based on criteria specified in another
之前已经多次询问过这个问题,但是我无法理解以前的解决方案并将其实现到我自己的查询中。 (我仍然是一个SQL新手。)
我有以下查询:
select *
from **Product** prod
inner JOIN
**account** acct on prod.product_id = acct.product_id
inner JOIN
**client_account_relationship** car on acct.account_id = car.ACCOUNT_ID
inner JOIN
**client** cl on car.client_id = cl.client_id
where prod.product_code != 'Producttype'
我的表结构如下:
产品 - 此表包含客户帐户所拥有的产品
帐户 - 此表包含客户持有的帐户
客户帐户关系 - 此表包含客户和帐户之间的链接
客户端 - 此表包含客户端
产品将始终拥有帐户,帐户将始终拥有客户/帐户关系,客户/帐户关系将始终拥有客户。
我想显示所有不包含特定产品类型的客户。 即告诉我所有不持有ProductType1的客户端。 但是因为客户可以容纳许多不同的产品类型,我的查询会显示除了我排除的产品之外的所有产品,但客户可能仍然持有该被排除的产品。
如何根据另一个表中设置的条件限制客户端表的结果?
SQL作为描述性语言的好处在于它非常好地从英语翻译。 您已经描述了您想要做的事情 - 找到所有没有特定产品的客户。 转换为SQL,这将是[not] exists
运算符:
SELECT *
FROM client c
WHERE NOT EXISTS (SELECT *
FROM product p
JOIN account a ON p.product_id = a.product_id
JOIN client_account_relationship car ON
a.account_id = car.ACCOUNT_ID
WHERE car.client_id = c.client_id AND
p.product_code = 'Producttype')
使用NOT IN
语句。 Not in
要求SQL专门排除那些符合sub query
中where
条件的条件的product types
select distinct car.client_id
from **Product** prod
inner JOIN
**account** acct on prod.product_id = acct.product_id
inner JOIN
**client_account_relationship** car on acct.account_id = car.ACCOUNT_ID
inner JOIN
**client** cl on car.client_id = cl.client_id
where car.client_id not in
(select car.client_id
from **Product** prod
inner JOIN
**account** acct on prod.product_id = acct.product_id
inner JOIN
**client_account_relationship** car on acct.account_id = car.ACCOUNT_ID
inner JOIN
**client** cl on car.client_id = cl.client_id
where prod.product_code != 'ProductType1'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.