left在右表中的非唯一列上连接两个表

时间:2016-07-16 21:48:19

标签: sql sql-server join left-join sql-query-store

我在sql server中有两个表,我想从这些表中选择并加入一些数据。第一个表有一些客户喜欢:

10 def fn X(n) = 
20 n = n + 1
30 print n
40 rem I'd like the definition of function X to end at line 30 above 
50 fn X(5) rem Produces syntax error on line 40

和第二张表我购买的表格包括最近购买的成本列表以及哪个客户购买了该产品:

---------------
customer   id   
Dave       1    
Tom        2     
---------------

我想选择第一张表(客户信息)及其购买的最后日期! 我试过左连接,但这并没有给我最后购买因为客户ID在第二个表中不是唯一的!如何使用SQL Server查询执行此功能?此致

3 个答案:

答案 0 :(得分:1)

使用not exists子句获胜!

select c.customer, p.*
from   Customer as c
inner  join Purchase as p
on     p.customer_id = c.id
where  not exists (
       select 1
       from Purchase as p2
       where p2.customer_id = p.customer_id
       and p2.date > p.date
       )

答案 1 :(得分:1)

如果您只想要最大日期,请使用聚合。对于没有购买的客户,我建议使用left join

select c.customer, c.id, max(p.date)
from customers c left join
     purchases p
     on c.id = p.customer_id
group by c.customer, c.id;

答案 2 :(得分:0)

我认为您可以使用内连接和分组

select table1.customer, table1.id, table.max(date) 
from  table1 
inner join table2 on table1.id = table2.id 
group by table1.customer, table1.id