2013-06-05 3 views
0
SELECT a.amount, CASE When d.name <> NULL Then d.name Else c.name End As 'name' 
from a 
JOIN b on a.id= b.id 
LEFT JOIN c on a.tokenId = c.tokenId 
LEFT JOIN d on a.tokenId = d.tokenId 

Я пытаюсь выбрать имя из таблицы d, если оно существует, и если это не так, выберите его из таблица c. Поле имени возвращается как NULL, однако я знаю, что они не являются нулевыми ни в одной из таблиц.Выберите поле из таблицы a, если оно существует, если оно не выбрало поле из таблицы b

Может ли кто-нибудь помочь мне решить эту проблему?

+0

попробовать его с 'd.name IS NOT NULL Тогда ... ' – Jerry

ответ

3

Нельзя использовать оператор <> для сравнения с null. Используйте оператор is:

SELECT a.amount, CASE When d.name is not null Then d.name Else c.name End As 'name' 

Вы также можете использовать функцию coalesce:

SELECT a.amount, coalesce(d.name, c.name) As 'name' 
+0

По какой-то причине он по-прежнему показывает null в столбце имен ... любые рекомендации по изменению объединений? – William

+0

@William: Вы уверены, что всегда есть соответствующая запись либо из таблицы 'c', либо' d'? Если ни один из них не имеет токена, вы будете «пустым» от обоих. Если должно быть возможно, что нет записи из любого из них, используйте любое значение, которое вы хотите вместо этого, в функции 'coalesce', например' coalesce (d.name, c.name, 'n/a') '. – Guffa

+0

Если я изменю их на ВРАЩАЮЩИЕСЯ СОЕДИНЕНИЯ, я вижу соответствующие имена, но не какое-либо значение перед ним (например, a.amount). – William

1

Использование COALESCE:

SELECT a.amount, COALESCE(d.name,c.name) "name" 
from a 
JOIN b on a.id= b.id 
LEFT JOIN c on a.tokenId = c.tokenId 
LEFT JOIN d on a.tokenId = d.tokenId 
Смежные вопросы