Использование псевдонима в запросе?

Alex2005
Дата: 26.10.2004 13:51:00
Всем привет. У меня вот какой вопрос: Есть запрос
select malias from show_mails(1) 
as (MID int4, UID int4, MAlias str_50, MDefault int2)
функция написана, типы правильные и все работает. Когда я пытаюсь "переименовать" show_mails работать перестает. Запрос выглядит так:
select sm.malias from show_mails(1) as sm
as (MID int4, UID int4, MAlias str_50, MDefault int2)
Добавление sm к описанию типов ни к чему не приводит. Подскажите плиз каков синтаксис в данном случае. Понимаю, что в данном случае переименование не целесообразно, но на самом деле у меня запрос неколько сложнее.
И вопрос номер два. Если я к данному запросу буду джойнить поля из другой функции где мне описывать типы возвращаемых ею значений
select sm.malias, st.tname from show_mails(1) as sm
as (MID int4, UID int4, MAlias str_50, MDefault int2)
join show_tariffs st on sm.uid = st.uid
И последнее, если есть у кого-нить ссылочка, где можно почитать про подобные вопросы, можно на англицком, буду очень признателен.
Заранее всем спасибо!
Niemi
Дата: 26.10.2004 14:17:08
Что-то я не встречал использования такой конструкции.
Обычно есть типа:
SELCT name1 as Imja1, name2 as "Imja nomer 2" FROM tablename
Можно ли узнать источник, где описаны эти примеры?
Alex2005
select malias from show_mails(1)
as (MID int4, UID int4, MAlias str_50, MDefault int2)
4321
Дата: 26.10.2004 14:43:03
Тест:
CREATE OR REPLACE FUNCTION public.test_records()
  RETURNS SETOF record AS
'
SELECT *
FROM test;
'
  LANGUAGE 'sql' STABLE;


SELECT * FROM (SELECT * FROM  test_records() AS (id int4 ,
  name varchar(64) )) as q ;
Alex2005
Дата: 26.10.2004 15:04:48
Niemi
Что-то я не встречал использования такой конструкции.
Обычно есть типа:
SELCT name1 as Imja1, name2 as "Imja nomer 2" FROM tablename
Можно ли узнать источник, где описаны эти примеры?
Alex2005
select malias from show_mails(1)
as (MID int4, UID int4, MAlias str_50, MDefault int2)

А как же вы тогда вызываете select из функции. Если select из таблицы, то можно типы не указывать, а если из функции, то надо указывать...
И на счет псевдонимов. Вы используете переименование возвращаемых столбцов, а мне надо переименовать функции (или могут быть и таблицы) к которым я обращаюсь..
В интербейзе я например писал так:
select s1.id, s2.name from users s1, manager s2...
4321
Дата: 26.10.2004 15:16:02
Спасибо заставили влезть в хелп

SELECT * FROM  test_records() AS q (id int4 ,
  name varchar(64) )   ;

where from_item can be one of:

[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ] function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
Description


2 раза AS - это лишнее
Alex2005
Дата: 26.10.2004 15:45:27
Спасибо. Вот все и заработало. С join все аналогично...
select su.uname, st1.tname
from show_users() as su (uid int4, uname str_100)
left join show_tariffs() as st1 (tid int4, tname varchar)
where su.uid = 1
4321
Дата: 26.10.2004 16:57:32
left join БЕЗ ON ???
очень странно

Но благодаря тому, что полез проверять странность, нашел "фичу" в 7.3. :

SELECT t.id AS tid, q.id AS  qid 
FROM test AS t LEFT JOIN test AS q
ON t.id=1


tid	qid
1	1
1	2
1	3
1	4
2	
3	
4	
Долго думал. Ничего не понял. Наверное я плохо понимаю Left Join или ON
фффф
Дата: 27.10.2004 03:44:58
4321

нашел "фичу" в 7.3. :

Это абсолютно нормальное поведение left join: выполнилось условие - строка из правой таблицы привязалась, а то что условие на столбец левой таблицы - неважно. Условие-то на join, а не на where.
4321
Дата: 27.10.2004 12:17:37
фффф
4321

нашел "фичу" в 7.3. :

Это абсолютно нормальное поведение left join: выполнилось условие - строка из правой таблицы привязалась, а то что условие на столбец левой таблицы - неважно. Условие-то на join, а не на where.


Пасиб. Размыслив я уже пришел к этому выводу
Left => _все_ из левой + те из правой, для которых условие - TRUE. Но фахт на первый взгляд неожиданный.