簡體   English   中英

SQL - 根據另一個表中指定的條件限制一個表的結果

[英]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 querywhere條件的條件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM