如何使用 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 philipxy 应该为您指明了正确的方向。
另一种方法是在发票上创建一个具有所需过滤条件的外部连接子查询。
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
我很难创建一个从三个 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 philipxy 应该为您指明了正确的方向。 另一种方法是在发票上创建一个具有所需过滤条件的外部连接子查询。
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