如何从SQL Server中相关表中具有一定行数的表中选择记录?
我不太清楚如何问这个问题,但我有两个表,它们在一对多关系中是相关的,我需要选择1表中的所有记录,这些记录在“多”表中少于3条如何从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表中选择所有
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中得到结果