我们假设,一个表有以下行
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)等。
答案 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。