如何使用 SQL select 的结果获取另一个 table 中的记录?

How to use a result from a SQL select to get records in another table?

我很难创建一个从三个 table 中提取数据的 Sql。

下面是每个table的部分结构:

Customer table:
accnum   integer
name     string
address  string
Routeno  string
delno    integer

Invoice table:
accnum   integer
invnum   string
deldate  date
amount   float
routeno  string
vstatus  string

Card table:
accnum    integer
expdate   string

我需要的结果是 routeno 1、2 和 3 上的所有客户,然后我需要任何有交货日期 (deldate) 的发票和任何有信用卡存档的发票。按 delno 排序。

Select c.accnum, c.name, c.address, c.routeno, c.delno from customer c
where c.routeno in ('1','2','3')

从这个结果我需要以下内容。

Select i.invnum, i amount from invoice i
where i.deldate = '2020-05-27' and (vstatus <> 'V' or vstatus is null)
and i.accnum=c.accnum
and i.routeno in ('1','2','3')

Select e.expdate from Card
where e.accnum=c.accnum

我试过使用 Join,但后来我只得到了有发票的客户,我把它们都开了。

Select c.accnum, c.name, c.address, c.routeno, i.invnum, i.amount,  e.expdate from Customer c
left Join Card e on c.accnum=e.accnum 
left Join Invoice i on c.accnum=i.accnum
where i.deldate = '2020-05-27' and (vstatus <> 'V' or vstatus is null)
and i.accnum=c.accnum
and i.routeno in ('1','2','3')
order by c.routeno, c.delno

我需要这样的结果:

accnum name      address    routeno  delno invnum amount expdate
000030 Smith     1 main st   1         1   A123    5.00   12/22
000030 Smith     1 main st   1         1   A125    8.00   12/22
000022 Knox      14 main st  1         2   A124    10.00   
000014 Vohs      20 main st  1         3   A119    4.00   11/21
000078 Bow       3 Camp Ave  1         4   A120    3.00
000015 Jordan    4 River rd  2         1   A118    11.00  10/23
000015 Jordan    4 River rd  2         1   A117    15.00  10/23

感谢您的帮助。 KHJ

提供的 link 应该为您指明了正确的方向。 另一种方法是在发票上创建一个具有所需过滤条件的外部连接子查询。

  SELECT c.accnum,
         c.name,
         c.address,
         c.routeno,
         i.invnum,
         i.amount,
         e.expdate
    FROM Customer c
         LEFT JOIN Card e ON c.accnum = e.accnum
         LEFT JOIN
         (SELECT accnum, invnum, amount
            FROM Invoice
           WHERE     deldate = '2020-05-27'
                 AND (vstatus <> 'V' OR vstatus IS NULL)
                 AND routeno IN ('1', '2', '3')) i
             ON i.accnum = c.accnum
ORDER BY c.routeno, c.delno