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

时间:2017-10-22 06:27:19

标签: sql database excel ms-access

我有成千上万的篮子,每个篮子都有自己独特的身份。数百万个球,每个都有自己独特的Id填充这些篮子。其中一些球是红色的。我的数据库有数百万条记录,包括3个字段,basketID,ballID和ball颜色。我需要返回所有带有红球的篮子中的BallID。在[Ballcolor] =“RED”时,我在过去几个小时内找到足够的查询来返回BasketID。现在我被卡住了。我需要包含在该结果中的任何basketID的所有记录。我第一次使用Access,因为我刚刚意识到Excel只能处理一百万行,尽管我编写了一系列宏和辅助列来解决它。一般策略可行,我可以稍后弄清楚语法。最糟糕的情况是我可以在Excel中一次“清理”一百万条记录,然后再导入Access,但这需要一些我不期待的所有打火机。

3 个答案:

答案 0 :(得分:2)

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

上面的查询为您提供了包含红球的basketID。

使用此查询,您可以使用子查询找到具有红球的篮子中的所有ballID。

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

答案 1 :(得分:0)

子查询会成为您想要的吗? 可能是这样的:

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

答案 2 :(得分:0)

您可以使用subquery。这样你就可以使用第一个查询的结果集作为第二个查询的输入。

让我们来看看你已经的问题:

SELECT DISTINCT basketId 
FROM table 
WHERE ballColor = "RED"

这将为您提供包含至少1个红球的独特篮子列表。

现在我们需要来自此列表中所有篮子的每一个球。

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

有人会说子查询很糟糕,因为它们会导致性能不佳。如果这成为一个问题,您应该考虑使用JOIN代替。