Куда тут вставить алиасы таблиц?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
frostyland
Сообщения: 38
Зарегистрирован: 05 июл 2007, 13:24

Куда тут вставить алиасы таблиц?

Сообщение frostyland » 31 авг 2008, 16:07

Есть запрос

Код: Выделить всё

SELECT DEPARTMENT.DEPT_NO, DEPARTMENT.DEPARTMENT, PDN.PDN 
FROM CSTMONTH 
INNER JOIN (DEPARTMENT INNER JOIN PDN ON DEPARTMENT.DEPT_NO=PDN.FK_DEPT_NO) 
ON CSTMONTH.MONTH_NO=PDN.FK_MONTH_NO
WHERE (((CSTMONTH.MONTH_NO)=1));
Куда правильно вставить алиасы таблиц? У меня получатся только для

Код: Выделить всё

SELECT DEPARTMENT.DEPT_NO, DEPARTMENT.DEPARTMENT, PDN.PDN 
FROM CSTMONTH С
INNER JOIN (DEPARTMENT INNER JOIN PDN ON DEPARTMENT.DEPT_NO=PDN.FK_DEPT_NO) 
ON C.MONTH_NO=PDN.FK_MONTH_NO
WHERE (((C.MONTH_NO)=1));
Только в этом случае результат запроса остается валидным.

ВОт так

Код: Выделить всё

*** 
FROM DEPARTMENT D, CSTMONTH С ***
И другим жонглирвоанием ничего не получается

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Куда тут вставить алиасы таблиц?

Сообщение kdv » 31 авг 2008, 18:11

ужас.

так не пишут. Правильно надо так

Код: Выделить всё

SELECT D.DEPT_NO, D.DEPARTMENT, P.PDN
FROM CSTMONTH C, DEPARTMENT D, PDN P
WHERE D.DEPT_NO=P.FK_DEPT_NO AND C.MONTH_NO=P.FK_MONTH_NO
AND CSTMONTH.MONTH_NO=1;
или

Код: Выделить всё

SELECT D.DEPT_NO, D.DEPARTMENT, P.PDN
FROM  DEPARTMENT D 
JOIN  PDN P ON D.DEPT_NO=P.FK_DEPT_NO
JOIN CSTMONTH C ON C.MONTH_NO=P.FK_MONTH_NO
WHERE CSTMONTH.MONTH_NO=1;
короче, читай www.ibase.ru/devinfo/joins.htm

p.s.
если ты создал алиас таблицы, т.е. FROM TABLE T, то дальше везде в запросе нужно обращаться к полям таблицы ТОЛЬКО через алиас таблицы.
И. если ты указал алиас ДЛЯ ОДНОЙ таблицы, то обязательно нужно указывать алиасы ДЛЯ ВСЕХ ДРУГИХ таблиц запроса.

то есть.
1. не указывать алиасы таблиц вообще. это редко возможно т.к. часто бывают одинаковые имена столбцов в разных таблицах
2. не указывать алиасы для таблиц, но использовать имена таблиц как префиксы столбцов
3. указывать алиасы таблиц для всех таблиц, везде.

frostyland
Сообщения: 38
Зарегистрирован: 05 июл 2007, 13:24

Re: Куда тут вставить алиасы таблиц?

Сообщение frostyland » 01 сен 2008, 07:24

kdv писал(а):ужас.

так не пишут. Правильно надо так
...
или

Код: Выделить всё

SELECT D.DEPT_NO, D.DEPARTMENT, P.PDN
FROM  DEPARTMENT D 
JOIN  PDN P ON D.DEPT_NO=P.FK_DEPT_NO
JOIN CSTMONTH C ON C.MONTH_NO=P.FK_MONTH_NO
WHERE CSTMONTH.MONTH_NO=1;
Да, конечно, Вы правы. Я просто хотел подчеркнуть, что не понял, как создавать алиасы для группы таблиц в запросе с JOIN'ами. Если в простом запросе типа

Код: Выделить всё

SELECT D.DEPT_NO, D.DEPARTMENT, P.PDN
FROM CSTMONTH C, DEPARTMENT D, PDN P
WHERE D.DEPT_NO=P.FK_DEPT_NO AND C.MONTH_NO=P.FK_MONTH_NO
AND C.MONTH_NO=1;
можно создать алиасы списком, то с JOIN приходится создавать при первом появлении имени таблицы. Спасибо за совет, все получилось.
kdv писал(а): если ты создал алиас таблицы, т.е. FROM TABLE T, то дальше везде в запросе нужно обращаться к полям таблицы ТОЛЬКО через алиас таблицы.
Наверное, не только дальше везде, а просто везде? Ведь алиасы в запросах начинают использоваться ДО их объявления?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Куда тут вставить алиасы таблиц?

Сообщение kdv » 01 сен 2008, 09:24

то с JOIN приходится создавать при первом появлении имени таблицы.
не советую так писать join. ведь проблема откуда взялась - написали
select ... from table C и поехали объединять таблицы D и P. Спрашивается, нафиг тогда начинали с таблицы C ? :)
не только дальше везде, а просто везде?
select t.* from table1 t
join table2....

это и было. начали с алиасом, а дальше алиасы не указывали. :)

Ответить