Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Помогите составить простой запрос


Автор: Antony41 24.6.2013, 12:42
Есть таблица GROUPS, с полями GROUPS.ID, GROUPS.TITLE
И есть таблица TEL_LST, с полями TEL_LST.GROUP_ID, .....

Нужно составить запрос чтобы запись таблицы TEL_LST соответствовало группе 
Код

(WHERE TEL_LST.GROUP_ID = GROUPS.ID)
.
Но кроме этого если у записи TEL_LST.GROUP_ID не существует связанной группы то запись всё равно должна отобразиться что то типа 
Код

OR (WHERE (TEL_LST.GROUP_ID = GROUPS.ID) is NULL)
 как то так но не пойму как составить...

Автор: Akina 24.6.2013, 13:18
Читайте справку по LEFT JOIN

Автор: Antony41 24.6.2013, 13:42
спасибо большое за помощь, разобрался, все получилось, но теперь хотелось бы еще дополнить кое чем допустим если связанной группы для записи не существует, то в поле вместо Groups.title результатом была строка не NULL, а "общая группа"

Код

select TEL_LST.ID, TEL_LST.GROUP_ID, TEL_LST.FIO, TEL_LST.EMAIL, TEL_LST.ADRESS, TEL_LST.PHONE, TEL_LST.SUBINFO, GROUPS.ID, GROUPS.TITLE 
FROM TEL_LST LEFT JOIN GROUPS ON TEL_LST.GROUP_ID = GROUPS.ID


если использовать IIF? то в каком месте?

Автор: Akina 24.6.2013, 14:28
Читайте справку по COALESCE()

Автор: Antony41 24.6.2013, 14:45
Не пойму в каком месте в sql запросе её использовать(

Автор: Akina 24.6.2013, 15:03
Код

SELECT ... , COALESCE(Groups.title, 'общая группа') AS title, ...

Автор: Antony41 24.6.2013, 15:17
что то не получается одна запись для 1 записи у меня по факту задан GROUP_ID для которой группы не существует
выполняю запрос и в поле TITLE пустая строка, т.е все равно запись попадает в группу NULL

Код

select TEL_LST.ID, TEL_LST.GROUP_ID, TEL_LST.FIO, TEL_LST.EMAIL, TEL_LST.ADRESS, TEL_LST.PHONE, TEL_LST.SUBINFO, GROUPS.TITLE, 
COALESCE(GROUPS.TITLE, 'NOT GROUP') AS TITLE FROM TEL_LST LEFT JOIN GROUPS ON TEL_LST.GROUP_ID = GROUPS.ID

Автор: Antony41 24.6.2013, 15:37
user posted image

Автор: Antony41 24.6.2013, 15:57
тут не много не так тут получается TITLE у GROUPS существует везде а GROUPS.ID = TEL_LST.GROUP_ID существует не всегда, а именно не существует группы с таким ID который указан в записи TEL_LST.GROUP_ID.

Добавлено через 8 минут и 15 секунд
Блин приношу свои извинения за невнимательность предыдущий запрос был не верный вот верный всё заработало
Код

select TEL_LST.ID, TEL_LST.GROUP_ID, TEL_LST.FIO, TEL_LST.EMAIL, TEL_LST.ADRESS, TEL_LST.PHONE, TEL_LST.SUBINFO, COALESCE(GROUPS.TITLE, 
'NOT GROUP') AS TITLE FROM TEL_LST LEFT JOIN GROUPS ON TEL_LST.GROUP_ID = GROUPS.ID


Еще раз огромное спасибо за помощь!

Добавлено через 8 минут и 38 секунд
дай бог здоровья Вам! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)