使用Microsoft SQL Server 2012,我试图让所有未在2016年付款的商家获得。
这是我的架构
:
我需要一个返回Business A的SQL语句,因为它没有2016年的付款。
以下是我的尝试:
Business Table
---------------
Id Name
1 Business A
2 Business B
Payments Table
---------------
Id BusinessId Year
1 2 2016
2 1 2017
3 2 2017
非常感谢任何帮助。
此外,标题可能有点令人费解,因此欢迎对此问题的标题进行建议编辑。
答案 0 :(得分:2)
NOT EXISTS,因为没有2016年的交易而应该返回商业A
about:home
答案 1 :(得分:2)
我认为您正在寻找不在付款表中的业务和年份的组合。如果是这样的话:
select b.*
from businesses b cross join
(select distinct year from payments) y left join
payments p
on b.id = p.businessid and b.year = y.year
where p.businessid is null;
cross join
生成所有业务和年份的组合。 left join
和where
子句会找到不存在的子句。
如果您只寻找一年,那么@maSTAShuFu答案是正确的方法。