Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何以一对多的关系连接两个表,并且只保留一对一的记录?_Sql_Sql Server - Fatal编程技术网

Sql 如何以一对多的关系连接两个表,并且只保留一对一的记录?

Sql 如何以一对多的关系连接两个表,并且只保留一对一的记录?,sql,sql-server,Sql,Sql Server,我有两个表:文件夹和参考资料。文件夹可以有0到2个引用(通常为1或2) 我有一个现有查询,用于搜索符合特定条件的文件夹。查询必须有一个新条件:仅查找具有一个引用的文件夹 理想情况下,为了限制对该旧应用程序的更改,新条件应仅在WHERE子句中(这排除了按x分组,有y) 例: 输出应该只包含FolderId1您可能需要: select . . . from folders f join (select r.*, count(*) over (partition by folderid) a

我有两个表:
文件夹
参考资料
。文件夹可以有0到2个引用(通常为1或2)

我有一个现有查询,用于搜索符合特定条件的
文件夹。查询必须有一个新条件:仅查找具有一个引用的
文件夹

理想情况下,为了限制对该旧应用程序的更改,新条件应仅在
WHERE
子句中(这排除了
按x分组,有y

例:


输出应该只包含FolderId1

您可能需要:

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;

使用以下查询创建临时表或创建表变量:

create table #Temp
(
    column_name int
)

insert into #Temp
     SELECT column_name
      FROM table_name
     GROUP BY column_name
    HAVING COUNT(column_name) = 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;