行が見つからない場合、副選択は実際にはNULLを返すことがわかると思います。
句が起動してNULLである行が見つかった場合、その行はTagNames_CTE
関数によって変換されます。where
TagNames
''
ただし、行がまったく見つからない場合、関数は呼び出されず(魔法をかける行がないため)、全体的な副選択の結果はNULLになります。これは、その列に外部の何かを返す必要があるためです。選択する。
確認する簡単な方法は、サブクエリを(なしで)単独で実行し、行を含むかまったく含まない行ISNULL()
を返すかどうかを確認することです。次の行に沿っていくつかの簡単なクエリを試してください。NULL
select 1,
(select isnull (null,2) from dummytable where 1 = 0)
from dummytable
と:
select 1,
(select isnull (null,2) from dummytable where 1 = 1)
from dummytable
1, null
前者があなたに与え、後者があなたに与えることをおそらくあなたは見つけるでしょう1,2
。次のステートメントを使用してMySQLでテストしたところ、これがおそらく正しいことがわかります。
> create table xyzzy (plugh integer);
> insert into xyzzy values (42):
> select 1,(select ifnull (null, 2) from xyzzy where 1 = 0) from xyzzy;
1 NULL
> select 1,(select ifnull (null, 2) from xyzzy where 1 = 1) from xyzzy;
1 2