Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2010, 11:20   #1
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию второе название таблицы

есть способ задавать иные имена таблицам в запросе.

вопрос зачем это нужно?

пример.

Код:
select * from tabel tb
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 26.04.2010, 11:34   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

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

Самый простой пример, это таблицы с древообразной структурой.

вот както так

Последний раз редактировалось vovk; 26.04.2010 в 11:36.
vovk вне форума Ответить с цитированием
Старый 26.04.2010, 11:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Neymexa
select * from tabel as [Моя таблица]
или чаще всего короче
select * from tabel tb where tb.Pole=...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2010, 11:55   #4
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию

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

Самый простой пример, это таблицы с древообразной структурой.

вот както так
точно-никак не мог вспомнить слово "псевдоним".

спасибо. но мне кажется путаницы не будет ведь имена таблиц уникальны.единственно кажется для уменьшения кода
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 26.04.2010, 12:46   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от Neymexa Посмотреть сообщение
точно-никак не мог вспомнить слово "псевдоним".

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

вот примерно таблица где по задумке, должен содержатся адрес
Код:
CREATE TABLE ADDRESS_BOOK (
  ID         INTEGER NOT NULL,
  NAME       "var_char_name" NOT NULL,
  PARENT_ID  INTEGER,
  LEVEL_NO   NUMERIC(1),
  /* Keys */
  PRIMARY KEY (ID),
  /* Foreign keys */
  CONSTRAINT FK_PARENT_ID
    FOREIGN KEY (PARENT_ID)
    REFERENCES ADDRESS_BOOK(ID)
    ON DELETE CASCADE
    ON UPDATE NO ACTION
);
к примеру предусмотрим чтоб адрес был не более чем 3 уровней вложенпия, допустим "город", "жилой район", "улица"

у каждого объекта будет свой ID и PARENT_ID парент соответственно указывает на объект выше уровнем. допустим у нас есть записи


ID NAME PARENT_ID LEVEL_NO
1 город1 | 0 | 1
2 район1 | 1 | 2
3 город2 | 0 | 1
4 район2 | 3 | 2
5 улица1 | 4 | 3
6 улица2 | 2 | 3
7 улица3 | 2 | 3

тут видно что улица1 находится в районе2 который расположен в городе2.

вот как получить список всех улиц с названием города и района (каждое название в своём столбце) запросом без псевдонимов?

с псевдонимами можно както так сделать
Код:
SELECT 
  g_.NAME,
  r_.NAME,
  u_.NAME
FROM
 ADDRESS_BOOK g_
 RIGHT JOIN ADDRESS_BOOK r_ ON (r_.PARENT_ID=g_.ID)
 RIGHT JOIN ADDRESS_BOOK u_ ON (u_.PARENT_ID=r_.ID)
where u_.LEVEL_NO=3

Последний раз редактировалось vovk; 26.04.2010 в 12:56. Причина: в запрос условие добавил
vovk вне форума Ответить с цитированием
Старый 26.04.2010, 13:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
путаница будет, если одну и туже таблицу использовать в 1 запросе, с разными связями.
Верно. СУБД сообщит что пошла перекресная ссылка таблицы на саму себя (что фактически заставит ее заново проходить эту таблицу, так рекурсия проходов набьется и СУБД упадет)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2010, 14:00   #7
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию

На примере не очень понятно,но видно что старался так что - спасибо всем огромное.
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 26.04.2010, 14:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну почему же непонятно?
Вот смотри: Есть таблица ADDRESS_BOOK
Ты пытаешься из нее выбрать только те записи где полюбому будут "город", "жилой район", "улица"
Для этого пишется обьединения:
Код:
ADDRESS_BOOK g_
 RIGHT JOIN ADDRESS_BOOK ON (PARENT_ID=g_.ID)
 RIGHT JOIN ADDRESS_BOOK ON (PARENT_ID=r_.ID)
Но беда в том что таблица не может быть обьеденина сама с собой,
RIGHT JOIN ADDRESS_BOOK ON (PARENT_ID=g_.ID) - тут ты пытаешся выдрать те записи, где адрес находится в нужном городе, но СУБД заругается - ей нужно обьединять по разным таблицам или представлениям
А когда ты даешь алиас
Код:
 ADDRESS_BOOK g_
 RIGHT JOIN ADDRESS_BOOK r_ ON (r_.PARENT_ID=g_.ID)
СУБД расценивает r_ как копию ADDRESS_BOOK, а это уже считается "другой таблицей", потому запрос с алиасами проходит на ура.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2010, 17:05   #9
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию

спс. понял.
кстати как переводится твоя подпись?
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 26.04.2010, 17:33   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
кстати как переводится твоя подпись?
Виталий, а можно я переведу? (правда, рiдной мовы я ни разумию, но гугл-транслейт_тулз рулит! )

Пусть проблемы и невзгоды не делают Вам в жизни погоды. Удачи Вам.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Второе высшее переводчика fs444 Свободное общение 4 24.04.2010 23:14
Второе высшее. Нужен совет. barfly Свободное общение 8 07.03.2010 14:17
где написать в php страничке название дб и таблицы? vagif.ka1995 PHP 3 13.10.2009 02:30
Могу ли я извлечь данные, из БД не зная напрямую название имеющейся в ней таблицы. Cabyrc БД в Delphi 11 27.03.2009 01:16
не выполняется второе условие if Division Общие вопросы C/C++ 5 24.12.2008 03:16