sql - 左外连接仅第一行

标签 sql sql-server greatest-n-per-group

我有一个类似的查询

SELECT S.product_id, S.link, C.id AS category_id
FROM Products P
INNER JOIN SEO S ON S.product_id = P.id AND P.product_type = 1
LEFT OUTER JOIN Categories C ON c.product_id = P.id
WHERE P.active = 1

只要每种产品仅分配给一个类别,我对我的工作就很好。但是,如果将产品分配给许多类别,它将返回所有可能的组合。

我可以只选择第一个,如果产品没有任何类别,则该链接仍应返回category_id = NULL

最佳答案

一种简单的方法是使用外部应用,以便具有关联的联接,并使其成为前1个查询。因此,您可以访问相关类别记录的所有列。我在此处添加类别名称作为示例:

select s.product_id, s.link, c.id as category_id, c.name as category_name
from products p
inner join seo s on s.product_id = p.id 
outer apply
(
  select top 1 * 
  from categories cat
  where cat.product_id = p.id
  order by cat.id
) c
where p.active = 1
and p.product_type = 1;

关于sql - 左外连接仅第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40424065/

相关文章:

mysql - 理解下面的MySQL逻辑

SQL服务器错误: The INSERT statement conflicted with the CHECK constraint

mysql - 如何获取此 mysql 表的每月总和?

sql - 如何根据另一列的聚合获得一列的相应值?

SQL 连接条件

sql - Oracle SQL ,如何使用当前日期 - 指定日期

c# - 是否有可能使用 Entity Framework 4,让主键在对象上的名称与在表中的名称不同?

MySQL查询以获取多个表上一列的第一个唯一值

sql - Oracle 11g 中使用 + 符号的左外连接

sql - TSQL - 是否可以定义排序顺序?