如何在第二个查询中使用第一个查询的结果?
我有成千上万的篮子,每个篮子都有自己独特的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
来代替。