如何在第二个查询中使用第一个查询的结果?

我有成千上万的篮子,每个篮子都有自己独特的ID。 数以百万计的球,每个都有自己独特的ID填充这些篮子。 其中一些球是红色的。 我的数据库有三百万条logging,包括三个字段,basketID,ballID和球颜色。 我需要返回篮球中有红球的所有BallID。 在[Ballcolor] =“RED”的时候,我在最近几个小时就想出了足够的查询来返回BasketID。 现在我卡住了。 我需要包含在该结果中的任何basketID的所有logging。 我第一次使用Access,因为我刚刚意识到Excel只能处理一百万行,不过我写了一系列的macros和帮助列来解决它。 一般的策略将起作用,我可以在后面找出语法。 最糟糕的情况是,我可以在Excel中一次性“清理”一百万条logging,然后将它们导入到Access中,但这将需要几乎所有的夜晚,我不期待。

SELECT basketID from <tablename> WHERE ballcolor = "RED"; 

上面的查询为你提供了一个有红球的篮子ID。

使用这个查询,你可以使用子查询在篮子中find所有有红球的ballID。

 SELECT ballID from <tablename> WHERE basketID IN (SELECT basketID from <tablename> WHERE ballcolor = "RED"); 

子查询会是你想要的吗? 可能是这样的:

 SELECT ballID FROM ( SELECT * FROM balls WHERE basketID = 'RED' ) 

你可以使用子查询 。 这让我们使用第一个查询的结果集作为第二个查询的input。

让我们看看你已经:

 SELECT DISTINCT basketId FROM table WHERE ballColor = "RED" 

这给你一个包含至less1个红色球的独特的篮子列表。

现在我们需要列出所有篮子里的每一个球。

 SELECT * FROM table WHERE basketId IN ( SELECT DISTINCT basketId FROM table WHERE ballColor = "RED" ) 

有人会说,子查询是坏的,因为它们可能会导致不佳的performance。 如果这成为一个问题,你应该考虑使用JOIN来代替。