Я работаю с 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'
Я не понимаю, что именно вызывает ошибку. Любая помощь будет оценена по достоинству. Заранее спасибо!
Предполагая, что "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 для рабочего решения
ERROR: syntax error at or near "NAME" LINE 3: when exists (NAME || ' ' || ABBREVIATION)