如何从SQL Server中相关表中具有一定行数的表中选择记录?

如何从SQL Server中相关表中具有一定行数的表中选择记录?,sql,sql-server,Sql,Sql Server,我不太清楚如何问这个问题,但我有两个表,它们在一对多关系中是相关的,我需要选择1表中的所有记录,这些记录在“多”表中少于3条 select b.foreignkey,count(b.foreignkey) as bidcount from b where b.foreignkey in (select a.id from a) and bidcount< 3 group by b.foreignkey 这根本不起作用,我知道,但我不知道怎么做 最后,我需要根据这个标准从a表中选择所有

我不太清楚如何问这个问题,但我有两个表,它们在一对多关系中是相关的,我需要选择1表中的所有记录,这些记录在“多”表中少于3条

select b.foreignkey,count(b.foreignkey) as bidcount
from b 
where b.foreignkey in (select a.id from a) and bidcount< 3 
group by b.foreignkey
这根本不起作用,我知道,但我不知道怎么做

最后,我需要根据这个标准从a表中选择所有记录。抱歉,这让人困惑

试试这个:

SELECT t1.id,COUNT(t2.parentId)
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.id = t2.parentId
GROUP BY t1.id
HAVING COUNT(t2.parentId) < 3

仅使用您的代码,未经测试:

SELECT
   b.foreignkey,
   count(b.foreignkey) as bidcount 
FROM 
   b
WHERE 
   b.foreignkey IN (SELECT a.id FROM a) 
GROUP BY 
   b.foreignkey 
HAVING 
   count(b.foreignkey) < 3  
您没有提到正在使用哪个版本的SQL Server-如果您使用的是SQL Server 2005或更新版本,则可以使用以下CTE公共表表达式:

;WITH ChildRows AS
(
   SELECT A.Id, COUNT(b.Id) AS 'BCount'
   FROM
      dbo.TableA A
   INNER JOIN
      dbo.TableB B ON B.TableAId = A.Id
)     
SELECT A.*, R.BCount
FROM dbo.TableA A
INNER JOIN ChildRows R ON A.Id = R.Id

如果要在一次查询中返回1表的所有字段,则“内部选择”将列出表A中的Id列以及与使用“内部联接到表B”的Id列关联的子行的计数,而“外部选择”仅构建在该结果集的顶部,并显示表A中的所有字段和表B中的计数,我建议您考虑使用交叉申请:

SELECT t1.* FROM table_1 t1
CROSS APPLY (SELECT COUNT(*) cnt FROM Table_Many t2 WHERE t2.fk = t1.pk) a
where a.cnt < 3

在某些特定情况下,根据您的索引和数据库结构,此查询的运行速度可能比GROUP BY方法快4倍

您已在sql server中发布了此问题,我在oracle数据库系统中得到了答案,我不知道它是否也将在sql server中运行

具体如下-

select [desired column list] from 
    (select b.*, count(*) over (partition by b.foreignkey) c_1
      from b
     where b.foreignkey in (select a.id from a) )

where c_1 < 3 ;
我希望它也能在sql server上运行。。。
如果没有,请让我更新..

您想要表中的所有列还是只需要外键?我将获得某些列。一旦我从我提到的查询中获得了foreignkey,我就会根据这些id是否在表a中得到结果