ПредишенСледващото

Псевдоними за колони и маси (SQL - урок от курса)

В някои ситуации, колоните и таблици на MySQL много по-лесно да се справят с други имена. Ние считаме, че тези действия, като например базата данни за поръчка на билети.

Информация за полети, предлагани от авиокомпанията е представена под формата на две маси - полет и Sity. Всеки запис в таблицата с полет отразява информация за конкретния полет: мястото на тръгване (origincityid колона), местоназначението (destinationcityid колона), както и датата и часа на тръгване, тип ВС, номер на полета и цената на билетите (други колони). масата на града е списък на всички градове, когато полетите се извършват. По този начин, в колони и маса полет origincityid destinationcityid ще бъде само идентификатори, които сочат към записи в таблицата с град.

За да получите списък на полетите, с отправни точки, трябва да изпълните следната заявка:

Заявка за получаване на списъка с полети до дестинации като предишната:

Логично е да се предположи, че изходните полети с две точки - тръгване и пристигане, - трябва да се направи искане, представено по-долу.

Въпреки това, след като се опита това, Внос Внос PhpMyAdmin показва грешка:
# 1066 - Не е уникален маса / псевдоним: "град".

Защо се случва това? Хвърли настрана вашите очаквания и да се опита да разбере какво всъщност означава това искане. Той иска MySQL- сървъра маса сливане полет. град и град. Опитвайки се да се свържете два пъти една и съща маса и води до съобщение за грешка.

В допълнение, липсата на логика в искането се усеща. Той се опитва да донесе номера на полета, града и името на града (отново два пъти) за всички записи на радиация чрез сравняване с идентификатор на колоните на таблицата origincityid град и destinationcityid. С други думи, лична градски маси и колони origincityid destinationcityid и трябва да са еднакви. Дори ако товарът поискване му резултат ще бъде даден списък на всички полети, в която местата на отпътуване и крайна дестинация са идентични. Едва ли има по един полет, който ще отговаря на това описание, ако не става дума за авиокомпанията, преди Лага живописни полети над града.

Необходимо е да се мисли за друг начин за повторна употреба град маса. MySQL позволява да се отървете от объркването. Трябва да се върнете от две различни влизане маса за всеки резултат: една за мястото на тръгване, а другата за дестинацията. Значително опростяване на ситуацията ще помогне на града на две копия на таблицата (един от наименованието за произход, а другата -. Destination). Но защо се справят с подкрепата на две различни списъци със същите градове? Решаване на проблема, като се посочва маса за двама уникален псевдоним град (временно име) в рамките на заявка.

Ако след името на таблицата в фрагмента от SELECT заявка. като се започне с ключова дума от. AS напиши прякор, ще получите временно име, което може да бъде посочено на друго място в запитването. Обърнете се към първия код мю издаване номер на полета и място на заминаване, и посочват произхода на масата псевдоним на града:

Запитване работи както преди, а резултатите ще останат същите, само че сега имате възможност да заменят дълги имена на таблици, по-кратък. Ако използвате псевдоним, вместо е и полет произхода и съответно, записът щеше да бъде намалена значително.

Да се ​​върнем към проблематично искането. Сега, два пъти се позовава на масата на града с различни псевдоними, може да се извърши тройна връзка (в който две таблици са всъщност един) и да получите желания резултат:

Също така е определено псевдоними за колони. В нашия случай, това помага да се прави разлика име колони в финалната маса:

Използвайте този подход, за да го добавите към вашия проект. Опитайте се да се реализира тази идея самостоятелно.

Подкрепете проекта - споделете линка, благодаря!