2010-07-16 4 views
9

Можем ли мы иметь несколько псевдонимов для одной таблицы?Несколько псевдонимов для таблицы

+0

Зачем вам это нужно? У вас есть конкретный запрос, который не работает? –

+0

для чего вам нужно? –

+1

Самостоятельно присоединяется или таблицы, которые живут в нескольких ролях. Примером последней может быть таблица измерений даты, которая объединяется в таблицу фактов с несколькими датами на ней. – ConcernedOfTunbridgeWells

ответ

11

Да. Вы должны сделать это для self join,, например, F у вас есть таблица, хранящая иерархия:

create table Foo (
    FooID int 
    ,ParentFooID int 
    ,[columns] 
) 

Вы можете сделать присоединиться, чтобы дети родителей, которые удовлетворяют определенное условие с запросом типа:

Select b.* 
    from Foo a 
    join Foo b 
    on a.FooID = b.ParentFooID 
    and [some condition filtering a] 
+1

+1 за полномочия умозаключения! –

+0

Но это повлияет на производительность или нет? –

+0

Оптимизатор запросов должен будет делать все, что необходимо для разрешения предиката соединения. Например, если таблица большая и имеет индекс в ParentFooID, вероятно, придется искать индексы для разрешения объединения FooID - ParentFooID. Выполнение матча всегда будет связано с некоторыми ресурсами. – ConcernedOfTunbridgeWells

3

Нет, не на одной таблице, но вы можете выбрать одну и ту же таблицу дважды и дать каждому другой псевдоним.

SELECT alias1.*, alias2.* 
FROM mytable alias1, mytable alias2 

Это позволит вам использовать ту же таблицу для другой цели в рамках одного запроса.

+0

Но это повлияет на производительность или нет? –

+0

Да, если вы выберете таблицу дважды, вам придется делать в два раза больше работы. Производительность будет зависеть от того, как они используются, к чему они присоединены, и индексов и статистики, доступных для оптимизатора запросов. –

+0

Поскольку запрос Криса не имеет условия соединения (неявный или эксплицитный), ожидается декартовое соединение - т.е. каждая строка в таблице будет связана со всеми строками в одной и той же таблице, поэтому, если у вас было 20 строк в таблице, ваш результат будет 400 строк! Это намного хуже, чем в два раза больше работы. Тем не менее, это не псевдонимы, которые вызывают работу - это декартово соединение. –

Смежные вопросы