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