Russian Qt Forum

Программирование => Базы данных => Тема начата: Alexorleon от Июль 16, 2013, 12:53



Название: Получение комментариев полей и таблиц Postgresql
Отправлено: 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;

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

Как изменить этот запрос(или сделать другой) так, чтобы он всегда выводил имя таблицы и имена полей этой таблицы, а комментарии к ним, если их нет, просто делал пустыми?


Название: Re: Получение комментариев полей и таблиц Postgresql
Отправлено: _OLEGator_ от Июль 16, 2013, 13:40
Читай про LEFT JOIN.


Название: Re: Получение комментариев полей и таблиц Postgresql
Отправлено: Alexorleon от Июль 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;


Название: Re: Получение комментариев полей и таблиц Postgresql
Отправлено: _OLEGator_ от Июль 17, 2013, 09:20
Матчасть по SQL подтянуть надо...
WHERE c.oid = a.attrelid убивает весь твой JOIN и выбирает как раз только те данные, которые существуют в обоих таблицах. Это условие надо в JOIN перенести.