У меня есть таблица, подобная следующей, которая в основном используется для «присвоения имени» значению в таблице (эта таблица также содержит значения для нескольких других таблиц, не только для MYTABLE; несколько не относящихся к делу полей из NAMEVALUEMAP):
NAMEVALUEMAP Table
---------------------
VALUE_ | NAME_
---------------------
0 | ZERO
1 | ONE
Я не хотел использовать JOIN, поэтому подумал об использовании подзапросов.
Проблема заключается в том, что когда значение не существует в таблице NAMEVALUEMAP, отображается NULL.
Вместо NULL я хочу показать фактическое значение из MYTABLE (MYTABLE имеет поле идентификатора в качестве столбца идентификаторов и содержит несколько строк):
-- //Fine, prints word 'ZERO' when MYTABLE.ABC is 0
SELECT
(SELECT NAME_ FROM NAMEVALUEMAP WHERE VALUE_ = (SELECT ABC FROM MYTABLE inner_ WHERE inner_.ID = outer_.ID))
FROM
MYTABLE outer_
-- //Not Fine, prints NULL (because "999" is not in NAMEVALUEMAP). In this case, MYTABLE.ABC is 999
-- //Want it to print 999 if the value is not in NAMEVALUEMAP
SELECT
(SELECT NAME_ FROM NAMEVALUEMAP WHERE VALUE_ = (SELECT ABC FROM MYTABLE inner_ WHERE inner_.ID = outer_.ID))
FROM
MYTABLE outer_
-- //Tried COALESCE, but the error is "Invalid column name 'VALUE_'"
SELECT
COALESCE((SELECT NAME_ FROM NAMEVALUEMAP WHERE VALUE_ = (SELECT ABC FROM MYTABLE inner_ WHERE inner_.ID = outer_.ID)), ABC)
FROM
MYTABLE outer_
Также , есть ли лучший способ выполнить такое сопоставление значения с именем?