[英]How to join two tables in a one-to-many relation, and keep only one-to-one records?
我有两个表: Folders
和References
。 一个文件夹可以有0到2个引用(通常为1或2)。
我有一个现有的查询,搜索尊重某些条件的Folders
。 查询必须具有新条件:仅查找具有一个引用的Folders
。
理想情况下 ,为了限制对此旧应用程序的更改,新条件应仅在WHERE
子句内(此规则group by x, having y
排除group by x, having y
)。
例如:
FolderId Name
0 Folder0
1 Folder1
2 Folder2
RefId FolderId Name
0 1 ref1
1 2 ref2
2 2 ref3
输出应该只包含FolderId 1
使用以下查询创建临时表或创建表变量:
create table #Temp
(
column_name int
)
insert into #Temp
SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(column_name) = 1;
然后使用与临时表join
到其他表,并把你想要的条件。
你可能想要这个:
select . . .
from folders f join
(select r.*, count(*) over (partition by folderid) as cnt
from references r
) r
on f.folderid = r.folderid and cnt = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.