В някои ситуации, колоните и таблици на MySQL много по-лесно да се справят с други имена. Ние считаме, че тези действия, като например базата данни за поръчка на билети.
Информация за полети, предлагани от авиокомпанията е представена под формата на две маси - полет и Sity. Всеки запис в таблицата с полет отразява информация за конкретния полет: мястото на тръгване (origincityid колона), местоназначението (destinationcityid колона), както и датата и часа на тръгване, тип ВС, номер на полета и цената на билетите (други колони). масата на града е списък на всички градове, когато полетите се извършват. По този начин, в колони и маса полет origincityid destinationcityid ще бъде само идентификатори, които сочат към записи в таблицата с град.
За да получите списък на полетите, с отправни точки, трябва да изпълните следната заявка:
Заявка за получаване на списъка с полети до дестинации като предишната:
Логично е да се предположи, че изходните полети с две точки - тръгване и пристигане, - трябва да се направи искане, представено по-долу.
Въпреки това, след като се опита това, Внос Внос PhpMyAdmin показва грешка:
# 1066 - Не е уникален маса / псевдоним: "град".
Защо се случва това? Хвърли настрана вашите очаквания и да се опита да разбере какво всъщност означава това искане. Той иска MySQL- сървъра маса сливане полет. град и град. Опитвайки се да се свържете два пъти една и съща маса и води до съобщение за грешка.
В допълнение, липсата на логика в искането се усеща. Той се опитва да донесе номера на полета, града и името на града (отново два пъти) за всички записи на радиация чрез сравняване с идентификатор на колоните на таблицата origincityid град и destinationcityid. С други думи, лична градски маси и колони origincityid destinationcityid и трябва да са еднакви. Дори ако товарът поискване му резултат ще бъде даден списък на всички полети, в която местата на отпътуване и крайна дестинация са идентични. Едва ли има по един полет, който ще отговаря на това описание, ако не става дума за авиокомпанията, преди Лага живописни полети над града.
Необходимо е да се мисли за друг начин за повторна употреба град маса. MySQL позволява да се отървете от объркването. Трябва да се върнете от две различни влизане маса за всеки резултат: една за мястото на тръгване, а другата за дестинацията. Значително опростяване на ситуацията ще помогне на града на две копия на таблицата (един от наименованието за произход, а другата -. Destination). Но защо се справят с подкрепата на две различни списъци със същите градове? Решаване на проблема, като се посочва маса за двама уникален псевдоним град (временно име) в рамките на заявка.
Ако след името на таблицата в фрагмента от SELECT заявка. като се започне с ключова дума от. AS напиши прякор, ще получите временно име, което може да бъде посочено на друго място в запитването. Обърнете се към първия код мю издаване номер на полета и място на заминаване, и посочват произхода на масата псевдоним на града:
Запитване работи както преди, а резултатите ще останат същите, само че сега имате възможност да заменят дълги имена на таблици, по-кратък. Ако използвате псевдоним, вместо е и полет произхода и съответно, записът щеше да бъде намалена значително.
Да се върнем към проблематично искането. Сега, два пъти се позовава на масата на града с различни псевдоними, може да се извърши тройна връзка (в който две таблици са всъщност един) и да получите желания резултат:
Също така е определено псевдоними за колони. В нашия случай, това помага да се прави разлика име колони в финалната маса:
Използвайте този подход, за да го добавите към вашия проект. Опитайте се да се реализира тази идея самостоятелно.