Russian Qt Forum
Ноябрь 22, 2024, 11:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение комментариев полей и таблиц Postgresql  (Прочитано 7704 раз)
Alexorleon
Гость
« : Июль 16, 2013, 12:53 »

Здравствуйте, помогите доделать запрос.

Данный запрос выводит имя таблицы, комментарий к таблице, имя поля и комментарий к полю по одной выбранной таблице.

SELECT c.relname, obj_description(c.oid), a.attname, d.description
FROM pg_class c, pg_attribute a, pg_description d
WHERE c.oid = a.attrelid
AND a.attnum > 0
AND (d.objoid = c.oid)
AND (a.attnum = d.objsubid)
AND c.relname = 'имя таблицы'
ORDER BY c.oid;

Но он НЕ выводит данные если нет комментариев. Если их нет, он не выводит даже имя таблицы.

Как изменить этот запрос(или сделать другой) так, чтобы он всегда выводил имя таблицы и имена полей этой таблицы, а комментарии к ним, если их нет, просто делал пустыми?
Записан
_OLEGator_
Гость
« Ответ #1 : Июль 16, 2013, 13:40 »

Читай про LEFT JOIN.
Записан
Alexorleon
Гость
« Ответ #2 : Июль 17, 2013, 06:07 »

Читай про LEFT JOIN.

А вы не могли бы более конкретно. Делаю так, но результат тот же.

SELECT c.relname, obj_description(c.oid), a.attname, d.description
FROM pg_class c
left join pg_description d on (d.objoid = c.oid)
left join pg_attribute a on (a.attnum = d.objsubid)
WHERE c.oid = a.attrelid
AND a.attnum > 0
AND c.relname = 'имя таблицы'
ORDER BY c.oid;
Записан
_OLEGator_
Гость
« Ответ #3 : Июль 17, 2013, 09:20 »

Матчасть по SQL подтянуть надо...
WHERE c.oid = a.attrelid убивает весь твой JOIN и выбирает как раз только те данные, которые существуют в обоих таблицах. Это условие надо в JOIN перенести.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.