1

私はSQL、より具体的にはmySQLでCASE/WHENを使用する方法を学ぼうとしています。

adhoc_itemadhoc_vulnerabilityの2つのテーブルがあります。ahdoc_itemには、それに関連する1つのadhoc_vulnerabilityがあります。現在、adhoc_vulnerability には、脆弱性(original_vulnerability_id)が付加されている場合とされていない場合があります。

そうでない場合は、名前を返したいと思います。

表:(またはその関連部分)

ADHOC_ITEM ここに画像の説明を入力してください

ADHOC_VULNERABILITY ここに画像の説明を入力してください これは私のクエリです:

SELECT adi.name as item, CASE ahv.original_vulnerability_id
WHEN ISNULL(ahv.original_vulnerability_id) THEN ahv.name
ELSE 'foo'
END NAME
FROM adhoc_item adi
JOIN adhoc_vulnerability ahv ON ahv.id = adi.adhoc_vulnerability_id

そしてこれらは結果です!

ここに画像の説明を入力してください

これは少し複雑であることがわかりましたが、約2時間考えていましたが、最後の項目original_vulnerability_idとしてNULLを含むadhoc_vulnerabilityを持つ)が正確に表示されるはずの値を示している理由についての説明が見つかりませんでした。その属性はnullではありません!

前もって感謝します。

4

1 に答える 1

4

問題は、がの場合ahv.original_vulnerability_idNULL関数ISNULL()が戻るTRUEことです(これは、MySQLと同じです1が、これは関係ありません)。したがって、列をと比較する代わりに、NULLそれをと比較していTRUEます。


式を次のように書き直しCASEます。

CASE 
WHEN ISNULL(ahv.original_vulnerability_id) THEN ahv.name
ELSE 'foo'
END NAME

またはとして:

CASE 
WHEN ahv.original_vulnerability_id IS NULL THEN ahv.name
ELSE 'foo'
END NAME
于 2012-11-01T21:31:50.500 に答える