Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > никак не могу понять зачем нужны псевдонимы?


Автор: poiuyt1234 10.9.2008, 18:19
Вот кусок из php кода и запрос к бд mysql:
Код
 $sql = "SELECT aa.forum_id, u.user_id, u.username 
        FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
        WHERE aa.auth_mod = " . TRUE . " 
            AND g.group_single_user = 1 
            AND ug.group_id = aa.group_id 
            AND g.group_id = aa.group_id 
            AND u.user_id = ug.user_id 
        GROUP BY u.user_id, u.username, aa.forum_id 
        ORDER BY aa.forum_id, u.user_id"; 

Зачем здесь псевдонимы и где они определяются?


Автор: Данкинг 10.9.2008, 19:46
aa, ug, g - а зачем - дык, для удобства. smile 

Автор: Akina 10.9.2008, 21:03
Цитата(Данкинг @  10.9.2008,  20:46 Найти цитируемый пост)
дык, для удобства

Используют их чаще для удобства и укорочения кода - это верно. Но НУЖНЫ они для другого - если в запросе используется несколько копий одной таблицы, алиасы позволяют понять, из какой копии таблицы следует выбирать поле.

Автор: poiuyt1234 10.9.2008, 22:20
Цитата

Но НУЖНЫ они для другого - если в запросе используется несколько копий одной таблицы, алиасы позволяют понять, из какой копии таблицы следует выбирать поле. 

Что значит копии таблицы? Таблица вроде одна.. 

Автор: Platon 11.9.2008, 07:06
Код

SELECT c1.value, c2.value, c1.value*c2.value FROM pifagor c1, pifagor c2


Добавлено через 6 минут и 44 секунды
Цитата(poiuyt1234 @  10.9.2008,  19:19 Найти цитируемый пост)
Зачем здесь псевдонимы и где они определяются?

Прикинь ты без алиасов пишешь, вот код:

Код

$sql = "SELECT " . AUTH_ACCESS_TABLE . ".forum_id, u.user_id, " . USERS_TABLE . ".username 
        FROM " . AUTH_ACCESS_TABLE . ", " . USER_GROUP_TABLE . ", " . GROUPS_TABLE . ", " . USERS_TABLE . "
        WHERE " . AUTH_ACCESS_TABLE . ".auth_mod = " . TRUE . " 
            AND " . GROUPS_TABLE . ".group_single_user = 1 
            AND " . USER_GROUP_TABLE . ".group_id = " . AUTH_ACCESS_TABLE . ".group_id 
            AND " . GROUPS_TABLE . ".group_id = aa.group_id 
            AND " . USERS_TABLE . ".user_id = " . USER_GROUP_TABLE . ".user_id 
        GROUP BY " . USERS_TABLE . ".user_id, " . USERS_TABLE . ".username, " . AUTH_ACCESS_TABLE . ".forum_id 
        ORDER BY " . AUTH_ACCESS_TABLE . ".forum_id, " . USERS_TABLE . ".user_id"; 


Автор: Akina 11.9.2008, 07:35
Цитата(poiuyt1234 @  10.9.2008,  23:20 Найти цитируемый пост)
Что значит копии таблицы? Таблица вроде одна..  

Она может использоваться несколько раз. Например, у тебя... ну скажем таблица неких показаний. допустим, потребление электричества. ID, дата, значение. Надо получить расход за период. Что ты делаешь? Берешь две копии таблицы, ... ну в общем что-то вот такое (код неверный, только демонстрирует суть):
Код

select t1.data, (t1.value-t2.value) as diff
from table as t1, table as t2
where t1.data>t2.data 
group by t1.data
having (t1.data-t2.data) = min(t1.data-t2.data)

Как видишь, без алиасов было бы невозможно понять, в каком случае брать значения даты и расхода из первой копии, а в каком из второй.

Автор: Akella 11.9.2008, 08:09
Мало того, если выбираются поля с одинаковыми именами из разных таблиц, то псевдонимы тоже могут прийти на выручку:
Код

select a.id, b.id from a, b

Автор: Akina 11.9.2008, 08:14
Цитата(Akella @  11.9.2008,  09:09 Найти цитируемый пост)
если выбираются поля с одинаковыми именами из разных таблиц, то псевдонимы тоже могут прийти на выручку:

Ну в данном случае правильная, не-сокращенная, запись, в формате таблица.поле - вполне достаточна для однозначной интерпретации, алиасов не требуется.

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