我有两个表,我想在两个表连接在一起之前过滤两个表中的数据。
客户表:
╔══════════╦═══════╗
║ 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 ║
╚══════════╩═══════╩══════════╝
我想离开join,以便从customer表中获取2019年和2020年的所有记录。此外,我还想在join之前过滤entry表中的category 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
哪个查询会更优化和更快?
谢谢你的帮助!!
1条答案
按热度按时间xurqigkl1#
你似乎想把两者都过滤掉
ON
条款和WHERE
条款:注意,如果
year
是一个数字,然后在IN
价值观。作为一般规则,过滤器位于
LEFT JOIN
进入WHERE
条款。后续表上的筛选器位于ON
条款。