在右侧 table 的非唯一列上左侧连接两个 table
left join two tables on a non-unique column in right table
我在 sql 服务器中有两个 table,我想 select 加入来自这些 table.the 的一些数据,首先 table 有一些客户喜欢:
---------------
customer id
Dave 1
Tom 2
---------------
和第二个 table i table 次购买,其中包括最后一次购买的成本列表以及哪个客户购买了该产品:
------------------
product date customer id
PC 1-1-2000 1
phone 2-3-2000 2
laptop 3-1-2000 1
------------------
我想要 select 首先 table (客户信息)他们购买的最后日期!
我试过 left join 但这并没有给我最后一次购买,因为客户 ID 在第二个 table 中不是唯一的!我如何使用 SQL 服务器查询来执行此功能?此致
使用 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
)
我认为你可以使用 inner join 和 group by
select table1.customer, table1.id, table.max(date)
from table1
inner join table2 on table1.id = table2.id
group by table1.customer, table1.id
如果您只想要最大日期,请使用聚合。我会向没有购买过的客户推荐 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;
我在 sql 服务器中有两个 table,我想 select 加入来自这些 table.the 的一些数据,首先 table 有一些客户喜欢:
---------------
customer id
Dave 1
Tom 2
---------------
和第二个 table i table 次购买,其中包括最后一次购买的成本列表以及哪个客户购买了该产品:
------------------
product date customer id
PC 1-1-2000 1
phone 2-3-2000 2
laptop 3-1-2000 1
------------------
我想要 select 首先 table (客户信息)他们购买的最后日期! 我试过 left join 但这并没有给我最后一次购买,因为客户 ID 在第二个 table 中不是唯一的!我如何使用 SQL 服务器查询来执行此功能?此致
使用 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
)
我认为你可以使用 inner join 和 group by
select table1.customer, table1.id, table.max(date)
from table1
inner join table2 on table1.id = table2.id
group by table1.customer, table1.id
如果您只想要最大日期,请使用聚合。我会向没有购买过的客户推荐 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;