在应用左连接之前筛选表

我有2个表格,我想在2个表格连接在一起之前过滤1个表格。

客户表:

╔══════════╦═══════╗ ║ Customer ║ State ║ ╠══════════╬═══════╣ ║ A ║ S ║ ║ B ║ V ║ ║ C ║ L ║ ╚══════════╩═══════╝ 

入口表:

  ╔══════════╦═══════╦══════════╗ ║ Customer ║ Entry ║ Category ║ ╠══════════╬═══════╬══════════╣ ║ A ║ 5575 ║ D ║ ║ A ║ 6532 ║ C ║ ║ A ║ 3215 ║ D ║ ║ A ║ 5645 ║ M ║ ║ B ║ 3331 ║ A ║ ║ B ║ 4445 ║ D ║ ╚══════════╩═══════╩══════════╝ 

好吧,我想离开join,所以我从客户表中获取所有logging,无论Entry表中是否有相关的logging。 不过,我想在连接之前在入口表中对类别D进行过滤。

希望的结果:

  ╔══════════╦═══════╦═══════╗ ║ Customer ║ State ║ Entry ║ ╠══════════╬═══════╬═══════╣ ║ A ║ S ║ 5575 ║ ║ A ║ S ║ 3215 ║ ║ B ║ A ║ 4445 ║ ║ C ║ L ║ NULL ║ ╚══════════╩═══════╩═══════╝ 

如果我要做以下查询:

  SELECT Customer.Customer, Customer.State, Entry.Entry FROM Customer LEFT JOIN Entry ON Customer.Customer=Entry.Customer WHERE Entry.Category='D' 

这将过滤掉最后一个logging。

所以我想要从左表中的所有行,并将其join到D类过滤的入口表。

预先感谢任何帮助!

您需要将WHERE筛选器移动到JOIN条件:

 SELECT c.Customer, c.State, e.Entry FROM Customer c LEFT JOIN Entry e ON c.Customer=e.Customer AND e.Category='D' 

看演示与SQL小提琴

你也可以这样做:

 SELECT c.Customer, c.State, e.Entry FROM Customer AS c LEFT JOIN (SELECT * FROM Entry WHERE Category='D') AS e ON c.Customer=e.Customer 

SQL小提琴在这里