我有两张表,我想在将两张表连接在一起之前,对两张表的数据进行过滤。
客户表。
╔══════════╦═══════╗
║ Customer ║ Year ║
╠══════════╬═══════╣
║ A ║ 2018 ║
║ B ║ 2019 ║
║ C ║ 2020 ║
╚══════════╩═══════╝
条目表:
╔══════════╦═══════╦══════════╗
║ Customer ║ Entry ║ Category ║
╠══════════╬═══════╬══════════╣
║ A ║ 5575 ║ D ║
║ A ║ 6532 ║ C ║
║ A ║ 3215 ║ D ║
║ A ║ 5645 ║ M ║
║ B ║ 3331 ║ A ║
║ B ║ 4445 ║ D ║
╚══════════╩═══════╩══════════╝
我想进行左连接,这样我就可以从客户表中得到2019年和2020年的所有记录......另外,我想在连接之前对条目表中的D类进行过滤。
希望得到的结果。
╔══════════╦═══════╦═══════╗
║ Customer ║ Year ║ Entry ║
╠══════════╬═══════╬═══════╣
║ ║ ║ ║
║ ║ ║ ║
║ B ║ 2019 ║ 4445 ║
║ C ║ 2020 ║ NULL ║
╚══════════╩═══════╩═══════╝
如果我做下面的查询。
SELECT Customer.Customer, Customer.Year, Entry.Entry
FROM Customer
LEFT JOIN Entry
ON Customer.Customer=Entry.Customer
WHERE customer.year in ('2019','2020') and Entry.Category='D'
同时,也可以用下面的查询来完成。
SELECT Customer.Customer, Customer.Year, Entry.Entry
FROM (select * from Customer where year in ('2019','2020')) Customer
LEFT JOIN (select * from Entry where Category='D') Entry
ON Customer.Customer=Entry.Customer
哪种查询方式会更优化、更快?
先谢谢大家的帮助!!
你似乎想在这两方面进行过滤。ON
条款和 WHERE
子句。
SELECT c.Customer, c.Year, e.Entry
FROM Customer c LEFT JOIN
Entry e
ON c.Customer = e.Customer AND e.Category = 'D'
WHERE c.year in ('2019', '2020');
请注意,如果 year
是一个数字,那么就去掉单引号。IN
值。
作为一般规则,在 第一 列表 LEFT JOIN
进去 WHERE
子句。 后续表的过滤器在 ON
条款。