powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Псевдонимы таблиц ?
7 сообщений из 7, страница 1 из 1
Псевдонимы таблиц ?
    #32003113
DennisL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос следующй :

Каковы правлила использования псевдонимов таблиц я имею ввиду SELECT * FROM Customers c Where c.ID= ....
вопросы :
1. Какой диапазон видимости такого псевдонима ( в пределах одного запроса ? продцедуры ?)
2. Где можно объявлять ? только после FROM или еще как-то ?
3. Если сложный запрос с несколькими подзапросами то где надо объявлять и вообще какие здесь правила объявления таблиц, нехочеться их везде указывать ... пример
SELECT *,
(SELECT SUM(CostSum)
FROM dbo.LAddCosts c
WHERE c.LAgr_id = a.Lagr_id) AS AdditionalCosts,
(SELECT COUNT(*)
FROM dbo.LAgrDocs d
WHERE d.LAgr_id = a.Lagr_id AND d.DocEx = 0) AS AllDocumentsExists
FROM dbo.LAgreements a INNER JOIN с ON c.LAgr_id = a.Lagr_id

таблица с не видна при JOIN ....
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003116
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
table_alias
Is an alias for table_name, view_name, or rowset_function, used either for convenience or to distinguish a table or view in a self-join or subquery. An alias is often a shortened table name used to refer to specific columns of the tables in a join. If the same column name exists in more than one table in the join, SQL Server requires that the column name must be qualified by a table name or alias. (The table name cannot be used if an alias is defined).

Если почитать BOL, то становиться понятно, что

1.Видимость в пределах запроса
2.Объявляется только для вида, таблицы или rowset-функции, соответственно во FROMе после имени таблицы(вида, функции)
3.Объявлять их необязательно, используются для того чтобы отличать колонки с одинаковыми именами. В примере ошибка мз-за того что JOIN должен быть связан с конкретной таблицей, а не с алиасом. Алиас - только для имён колонок
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003117
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>3.Объявлять их необязательно, используются для того чтобы отличать колонки с одинаковыми именами. В примере ошибка мз-за того >что JOIN должен быть связан с конкретной таблицей, а не с алиасом. Алиас - только для имён колонок

Неправда
В join-е можно алиасы использовать, а впримере не виден, потому что используется как раз не в пределах запроса
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003119
DennisL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, вроде разобрался !!
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003124
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Genady

Ой, не знал что в join-е можно алиасы использовать. Из описания этого тоже не видно
[ FROM { < table_source > } [ ,...n ] ]

< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ] [ WITH ( < view_hint > [ ,...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
| user_defined_function [ [ AS ] table_alias ]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >

< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| [ ( ] < joined_table > [ ) ]

< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ < join_hint > ]
JOIN

А можно пример как их написать? Я попытался изобразить что-то типа
select name, (select count(*) from syscolumns s
inner join o on o.id=s.id)
from sysobjects o
но это неправильно. А как надо было написать? Или вообще какой-нибудь работающий пример, т.к. в хелпе это не описано.

Заранее благодарен
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003131
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select name, (select count(*) from syscolumns s
inner join sysobjects o on o.id=s.id)
from sysobjects

Вот так можно. В смысле что в выражении on можно писать

А Вы имели в виду, что сразу после join?
Если так, то я неправ
...
Рейтинг: 0 / 0
Псевдонимы таблиц ?
    #32003132
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так то и я могу

У человека-то было написано:
a INNER JOIN с ON c.LAgr_id = a.Lagr_id
я про это написал и подумал что Вы с этим не согласны(типа так можно писать)

я даже и не обратил внимания что это другой запрос

вообщем, конценсус
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Псевдонимы таблиц ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]