【发布时间】:2020-08-25 11:22:17
【问题描述】:
我有两张桌子。表t 中的某些值需要与表m 中的某些值匹配,以便从表m 中识别目标值。
表 t 如下所示。
ID | A | B | C
1 | x | y | z
2 | 1 | 2 | 3
表 m 如下所示。
matchA | matchB | matchC | priority | targetValue
NULL | y | NULL | 1 | this
NULL | NULL | z | 2 | that
逻辑应该如下:表t中的列A应该与表m中的列matchA匹配,依此类推。正如您在示例中看到的,可以有多个匹配项。在表t 的第一行中,B 列的值y 与matchB 列中表m 的第一行的y 匹配。但是,表t 的第一行也与z 列z 的值在C 和matchC 中的表m 的第二行匹配。如果是这种情况,则只应在结果集中返回具有最低 priority 的匹配项。应该显示列targetValue 的值。
我知道如何进行匹配,但我不知道如何过滤到具有最低优先级的结果。
这是我目前所拥有的。
SELECT * FROM t
INNER JOIN m
ON m.matchA = t.A
OR m.matchB = t.B
OR m.matchC = t.C
这会返回两个匹配的行。但是,我只想要priority 列中最低值的匹配项。
【问题讨论】: