SQL选择符合另一个表的标准的记录

时间:2017-02-03 16:38:08

标签: sql-server tsql join filtering aggregate-functions

我有一个非常复杂的查询,并试图给出一个我遇到问题的子表的简单示例,如果您需要更多信息或上下文,请告诉我。

我在这里提出了一个包含一些示例数据的CSV文件: https://drive.google.com/open?id=0B4xdnV0LFZI1dzE5S29QSFhQSmM

我们制作蛋糕,99%的蛋糕都是由我们制作的。 1%是我们从分包商处交付给我们的蛋糕,我们接收'和审计'它

我想做的是写下这样的东西:

SELECT 
Cake.Cake
Instruction.Cake_Instruction_Key
Steps

FROM
Cake
Join Instruction 
ON  Cake.Cake_Key = Instruction.Cake_Key
JOIN Steps
ON Instruction.Step_Key = Steps.Step_Key

WHERE
MIN(Steps.Step_Key) = 1

这是失败的,因为你在WHERE子句中没有聚合。

期望的结果将是:

Cake C 13 Receive
Cake C 14 Audit
Cake D 15 Receive
Cake D 16 Audit

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

看看HAVING关键字: KeyDown

它与WHERE子句的工作方式大致相同,但对于GROUP BY子句后的聚合函数。

但要注意这可能很慢。您应该尝试在WHERE中尽可能地减少记录数量,甚至考虑使用临时表将数据聚合到第一个。

答案 1 :(得分:0)

您正在谈论的是GROUP BY / HAVING子句,因此在您的情况下,您需要添加类似

的内容
GROUP BY Cake.Cake, Instruction.Cake_Instruction_Key, Steps
HAVING MIN(Steps.Step_Key) = 1