gpt4 book ai didi

sql - 如何在 SQL Server 中左连接到第一行

转载 作者:行者123 更新时间:2023-12-03 02:09:26 27 4
gpt4 key购买 nike

如何左连接两个表,仅从第二个表中选择第一行? first match

我的问题是以下问题的后续: SQL Server: How to Join to first row我使用了该线程中建议的查询。

CREATE TABLE table1(
id INT NOT NULL
);
INSERT INTO table1(id) VALUES (1);
INSERT INTO table1(id) VALUES (2);
INSERT INTO table1(id) VALUES (3);
GO

CREATE TABLE table2(
id INT NOT NULL
, category VARCHAR(1)
);
INSERT INTO table2(id,category) VALUES (1,'A');
INSERT INTO table2(id,category) VALUES (1,'B');
INSERT INTO table2(id,category) VALUES (1,'C');
INSERT INTO table2(id,category) VALUES (3,'X');
INSERT INTO table2(id,category) VALUES (3,'Y');
GO

------------------
SELECT
table1.*
,FirstMatch.category
FROM table1

CROSS APPLY (
SELECT TOP 1
table2.id
,table2.category
FROM table2
WHERE table1.id = table2.id
ORDER BY id
)
AS FirstMatch

但是,通过此查询,我得到了内部联接结果。我想要得到左连接结果。所需结果中的 tabel1.id 应为“2”且为 NULL。怎么做?

最佳答案

使用row_number左连接

with cte as(

select id,
category,
row_number() over(partition by id order by category) rn
from table2
)
select t.id, cte.category
from table1 t
left outer join cte
on t.id=cte.id and cte.rn=1

输出:

id  category
1 A
2 (null)
3 X

SQLFIDDLE DEMO

关于sql - 如何在 SQL Server 中左连接到第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com