查询在特定城市的所有分行都有存款的客户

2 sql-server query t-sql

我有 3 个表如下:

Customer (CustomerName , CustomerCity , CustomerStreet)
Branch   (BranchName , BranchCity)
Deposit  (CustomerName , BranchName , AccountNumber , Balance)
Run Code Online (Sandbox Code Playgroud)

在这里,我向您展示上表的示例数据:

Customer ('John','City1','Street1')
         ('Lili','City2','street2')

Branch   ('Branch1','Kaj')
         ('Branch2','Bahar')
         ('Branch3','Bahar')
         ('Branch4','Bahar')

Deposit  ('John','Branch1',12,1000)
         ('Lili','Branch1',123,1222)
         ('Lili','Branch2',124,45233)
         ('Lili','Branch3',345,6000)
         ('Lili','Branch4',567,5600)
Run Code Online (Sandbox Code Playgroud)

所以根据上面的信息,我需要一个查询来给我在 Bahar 的所有分行都有存款的 CustomerName 。

我应该在输出中看到“Lili”,因为它在 Bahar 的所有分支都有存款,但我不应该看到 John,因为它只在 Bahar 的一个分支中有存款。

我尽力编写查询,但我不能。你能帮我解决这个问题吗?

Pan*_*tea 5

对于您的问题,我有两个解决方案:解决方案 1,我使用 Not Exists , Except

Select distinct C.CustomerName
From customers C
where NOT EXISTS ((Select BranchName
                   From Branch
                   Where BranchCity='Bahar')

                      EXCEPT

                   (Select BranchName
                    From Deposit a
                    where A.CustomerName = C.CustomerName))
Run Code Online (Sandbox Code Playgroud)

在解决方案 2 中,我使用 Not Exists ,

Select Distinct C.CustomerName
From Customers C
Where NOT EXISTS  (Select BranchName
                   From Branch b
                   Where BranchCity='Bahar'
                   and NOT EXISTS (select BranchName
                                   from Deposit a
                                   where a.CustomerName=C.CustomerName
                                   and a.BranchName=b.branchName))
Run Code Online (Sandbox Code Playgroud)

上面的每个查询都会回答您的查询并为您提供所需的结果。