如何从表

时间:2017-09-19 22:04:30

标签: sql select

我们假设,一个表有以下行

ID Name Value 1 Apple Red 1 Taste Sour 2 Apple Yellow 2 Taste Sweet 3 Apple Red 3 Taste Sour 4 Apple Green 4 Taste Tart 5 Apple Yellow 5 Taste Sweet

我想知道,我如何选择与Apple和Taste的独特组合相对应的ID?例如,ID = 1对应于红酸苹果,并且在查询结果中可以省略ID = 3。类似地,ID = 2用于黄色甜苹果,ID = 5可以从查询结果等中排除。有效的查询结果可以是以下任何ID集:(1,2,4),(1,4, 5),(2,3,4)等。

1 个答案:

答案 0 :(得分:1)

可以通过更好地理解问题来改进查询或模型。

但是假设模型是正确的并且问题是这样的,这将是我的快速方法。

SELECT MIN(a.ID) as ID
FROM Table a
INNER JOIN Table b ON a.ID = b.ID AND a.Name > b.Name
GROUP BY a.Value, b.Value

此查询使用ID将表连接到自身。但是因为每种可能的组合你会有四行(例如:Apple-Apple,Taste-Taste,Apple-Taste和Taste-Apple),你需要说明它们不同(因为你仍然会有Apple-味道和味道 - 苹果)但其中一个比另一个更大(这样你选择在连接的一侧有苹果,在另一侧有味道)。这就是a.Name > b.Name

的原因

然后,您可以按两个值进行分组,说明您不希望拥有多个Apple值和Taste值的组合。结果只有三行。

选择我认为它取决于RDBMS(我使用的是SQL Server语法),并且它选择了最低的ID。你不在乎,所以你可以选择Min或Max。最小结果为1,2,4行。 Max会产生3,4,5。