Ошибка при использовании нескольких условий в запросе

1

Я работаю с PostgreSQL 8.4.4. Я хочу получить запись из таблицы на основе нескольких условий,

1) проверить, существует ли запись

2) если существует тогда → если type_id равно 1, тогда выберите имя, если type_id равно 2, затем выберите имя, аббревиатуру

3) если запись не выйдет, напечатайте как "Missing"

Ниже приведен запрос о том же

select 
    case 
        when exists (select NAME || ' ' || ABBREVIATION from CONTACTS_COMPANY where id = 15)
        then ( select
                case
                    when type_id = '1' 
                        then (select UPPER(NAME) from CONTACTS_COMPANY where id = 15) 
                    when type_id = '2' 
                        then (select UPPER(NAME) || ' ' || UPPER(ABBREVIATION) from CONTACTS_COMPANY where id = 15) 
                end
            ) 
    else UPPER('MISSING')
end

При запуске над запросом я получаю ошибку как

Ошибка SQL:

ОШИБКА: столбец "type_id" не существует

LINE 7: когда type_id = '1'

Я не понимаю, что именно вызывает ошибку. Любая помощь будет оценена по достоинству. Заранее спасибо!

Теги:

1 ответ

0
Лучший ответ

Предполагая, что "type_id" действительно существует (вероятно, вы уверены в этом...?), Я бы сказал, что запрос не структурирован правильно. Ваш внешний выбор пропускает инструкцию "из". Кроме того, ваши внутренние утверждения неверны. Он должен выглядеть примерно так:

select 
    case 
        when exists  
           (select ('NAME' || ' ' || 'ABBREVIATION')
           from "CONTACTS_COMPANY")
        then (
            case
                when type_id = '1' 
                    then UPPER("NAME") 
                when type_id = '2' 
                    then  UPPER("NAME") || ' ' || UPPER("ABBREVIATION") 
            end
        ) 

    else UPPER('MISSING')
    end
from "CONTACTS_COMPANY"
WHERE id='15'

Я не тестировал это, но общая структура должна быть в порядке. И я, надеюсь, правильно понял, что вы пытаетесь сделать. Пожалуйста, напишите комментарий, если это не так :)

Код UPDATE для рабочего решения

  • 0
    также выдает ошибку: ERROR: syntax error at or near "NAME" LINE 3: when exists (NAME || ' ' || ABBREVIATION)
  • 0
    Извините, я обновил свое решение - все еще не уверен, что это то, что вы хотите, но этот работает (проверено) :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню