Страница 1 из 1
Куда тут вставить алиасы таблиц?
Добавлено: 31 авг 2008, 16:07
frostyland
Есть запрос
Код: Выделить всё
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));
Только в этом случае результат запроса остается валидным.
ВОт так
И другим жонглирвоанием ничего не получается
Re: Куда тут вставить алиасы таблиц?
Добавлено: 31 авг 2008, 18:11
kdv
ужас.
так не пишут. Правильно надо так
Код: Выделить всё
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. указывать алиасы таблиц для всех таблиц, везде.
Re: Куда тут вставить алиасы таблиц?
Добавлено: 01 сен 2008, 07:24
frostyland
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, то дальше везде в запросе нужно обращаться к полям таблицы ТОЛЬКО через алиас таблицы.
Наверное, не только
дальше везде, а просто
везде? Ведь алиасы в запросах начинают использоваться ДО их объявления?
Re: Куда тут вставить алиасы таблиц?
Добавлено: 01 сен 2008, 09:24
kdv
то с JOIN приходится создавать при первом появлении имени таблицы.
не советую так писать join. ведь проблема откуда взялась - написали
select ... from table C и поехали объединять таблицы D и P. Спрашивается, нафиг тогда начинали с таблицы C ?
не только дальше везде, а просто везде?
select t.* from table1 t
join table2....
это и было. начали с алиасом, а
дальше алиасы не указывали.
