加入时过滤数据

问题描述 投票:0回答:1

我有两张表,我想在将两张表连接在一起之前,对两张表的数据进行过滤。

客户表。

   ╔══════════╦═══════╗
   ║ 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

哪种查询方式会更优化、更快?

先谢谢大家的帮助!!

sql sql-server database where-clause
1个回答
1
投票

你似乎想在这两方面进行过滤。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 条款。

© www.soinside.com 2019 - 2024. All rights reserved.