Tom*_*kin 62 sql join filter where-clause
我有2个表,我想在2个表连接在一起之前过滤1个表.
客户表:
????????????????????
? Customer ? State ?
????????????????????
? A ? S ?
? B ? V ?
? C ? L ?
????????????????????
Run Code Online (Sandbox Code Playgroud)
参赛表:
???????????????????????????????
? Customer ? Entry ? Category ?
???????????????????????????????
? A ? 5575 ? D ?
? A ? 6532 ? C ?
? A ? 3215 ? D ?
? A ? 5645 ? M ?
? B ? 3331 ? A ?
? B ? 4445 ? D ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)
好的我想要左连接,所以我从Customer表中获取所有记录,无论Entry表中是否有相关记录.不过,我想在类d筛选入口表在连接前.
期望的结果:
????????????????????????????
? Customer ? State ? Entry ?
????????????????????????????
? A ? S ? 5575 ?
? A ? S ? 3215 ?
? B ? V ? 4445 ?
? C ? L ? NULL ?
????????????????????????????
Run Code Online (Sandbox Code Playgroud)
如果我要做以下查询:
SELECT Customer.Customer, Customer.State, Entry.Entry
FROM Customer
LEFT JOIN Entry
ON Customer.Customer=Entry.Customer
WHERE Entry.Category='D'
Run Code Online (Sandbox Code Playgroud)
这将过滤掉最后一条记录.
所以我想要左表中的所有行,并将它加入到类别D上过滤的条目表中.
感谢提前的任何帮助!!
Tar*_*ryn 87
您需要将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'
Run Code Online (Sandbox Code Playgroud)
Jef*_*erg 19
你也可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
SQL小提琴在这里