Имам две маси. Някои стойности от таблица 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
Логиката трябва да е следната: Колона A
от таблица t
трябва да съответства на колона matchA
от таблица m
и т.н. Както можете да видите в примера, може да има няколко съвпадения. В първия ред на таблица t
стойността y
на колона B
съвпада с y
на първия ред на таблица m
в колона matchB
. Първият ред на таблица t
обаче съвпада и с втория ред на таблица m
със стойността z
в колони C
и matchC
. Ако случаят е такъв, само съвпадението с най-ниското priority
трябва да бъде върнато в набора от резултати. Трябва да се покаже стойността на колона targetValue
.
Знам как да направя съпоставянето, но не знам как да филтрирам само до резултата с най-нисък приоритет.
Това е, което имам досега.
SELECT * FROM t
INNER JOIN m
ON m.matchA = t.A
OR m.matchB = t.B
OR m.matchC = t.C
Това връща и двата съвпадащи реда. Искам обаче само съвпадението с най-ниската стойност в колона priority
.