私は基本的にテーブル内の値に「名前を付ける」ために使用される次のようなテーブルを持っています (このテーブルには、MYTABLE だけでなく、他の多くのテーブルの値も含まれています。無関係なフィールドをいくつか省略しましたNAMEVALUEMAP から):
NAMEVALUEMAP Table
---------------------
VALUE_ | NAME_
---------------------
0 | ZERO
1 | ONE
JOIN を使いたくなかったので、サブクエリを使用することを考えました。
問題は、NAMEVALUEMAP テーブルに値が存在しない場合に NULL が表示されることです。
NULL の代わりに、MYTABLE からの実際の値を表示したい (MYTABLE には ID 列として ID フィールドがあり、いくつかの行が含まれています)。
-- //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_
また、この種の値から名前へのマッピングを行うためのより良い方法はありますか?