我之前提取了一些数据,发现结果太多了,无法使用(返回了超过400万行)。我发现罪魁祸首是大量的ID,每个ID都有数千条记录。

这是数据的结构。我有两张桌子。 tbl1对每个“ATID”都有一个记录(ATID基本上是一个比例尺ID)。但是,每个ATID本质上都是其自己的表-它有一个针对秤上每个项目的记录。 tbl2枚举了这些项目-每个ATID的每个比例项目都有一行。因此,每个ATID的行数从1到500,000(我知道,这确实太过分了)。

我想排除具有超过100行的ATID。仅供参考,这是一个我具有只读访问权限的数据库。

这是我的原始查询:

SELECT tbl1.ATID, tbl1.ATDesc, tbl2.AValue, tbl2.ADesc, tbl2.APosNeg
FROM tbl1 LEFT OUTER JOIN tbl2 ON (tb1.ATID = tbl2.ATID);

这是我用来获取ATID列表并在每个ATID的tbl2中记录计数的查询:
select ATID, count(*) as row_count
from tbl2
group by ATID
order by row_count desc;

对于我的最终产品,我只想返回tbl2中少于100行的ATID。但是,如果我什至尝试使用row_count变量在第二个查询中添加WHERE子句,它也会失败。因此,我什至不知道如何将两个查询组合在一起并获得WHERE子句。

我唯一的选择是明确地排除ATID,当我知道它们具有太多记录但又有太多记录要排除时(即使用WHERE NOT ATID = 1016 AND NOT ATID = 554 AND NOT ....等)

最佳答案

您已经完成了,只需要将两个查询放在一起:

SELECT tbl1.ATID, tbl1.ATDesc, tbl2.AValue, tbl2.ADesc, tbl2.APosNeg
FROM tbl1 LEFT OUTER JOIN tbl2 ON (tb1.ATID = tbl2.ATID)
WHERE tbl1.ATID NOT IN (
  select ATID
  from tbl2
  group by ATID
  HAVING COUNT(*) >= 100
)

07-28 13:47