Як ви двічі в mysql приєднаєтесь до одного і того ж столу?


110

У мене 2 таблиці. Один (домени) має ідентифікатори домену та доменні імена (dom_id, dom_url).

інший містить фактичні дані, 2 з яких стовпці вимагають доменних імен ДО та ВІД. Отже, у мене є два стовпці rev_dom_from і rev_dom_for, обидва з яких зберігають ідентифікатор доменного імені, з таблиці доменів.

Простий.

Тепер мені потрібно фактично відобразити обидва доменні імена на веб-сторінці. Я знаю, як відображати те чи інше за допомогою LEFT JOIN доменів ON reviews.rev_dom_for = запит domains.dom_url, і тоді ви відлунюєте dom_url, який би повторював ім'я домену у стовпці rev_dom_for.

Але як я можу зробити так, щоб воно перегукувалося з другим доменним іменем у колонці dom_rev_from?

mysql 

Відповіді:


166

ви б використовували інше з'єднання, щось у цьому напрямку:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

Редагувати :

Все, що ви робите, - це кілька разів приєднуватися до таблиці. Подивіться на запит у публікації: він вибирає значення з таблиць Огляди (псевдоніми як rvw), в цій таблиці ви знайдете 2 посилання на таблицю Домен (ЗА і ВІД).

На даний момент простою справою залишається приєднати таблицю Домен до таблиці Відгуки. Один раз (псевдонім як toD) для FOR, а другий раз (псевдонім якD) для FROM.

Потім у списку SELECT ви виберете поля DOM_URL з обох лівих приєднань таблиці DOMAIN, посилаючись на них псевдонімом для кожного приєднаного посиланням на таблицю доменів і псевдонімом їх як ToURL та FromUrl.

Щоб отримати докладнішу інформацію про псевдонім у SQL, читайте тут .


5
хитрість полягає в тому, що ви ототожнили кожен ПРИЄДНАННЯ з іменами "AS to" та "AS from", щоб ви могли використовувати їх у SELECT.
Меттью Сміт

1
використання не ключового слова для назви таблиці могло б уточнити. окрім того, використовуйте ключове слово "як" під час створення дозволу.
TheSoftwareJedi

Пробачте, але я все ще не розумію, як це має працювати. Дві таблиці: домени (dom_id, dom_url) та огляди (rev_id, rev_dom_from, rev_dom_for). Якби хтось міг написати точний запит, тож я можу розвісити його, це було б чудово, тому що я не маю уявлення, що мені потрібно редагувати.

1
Розглядайте псевдоніми як посилання на рядки в таблиці, а не на саму таблицю. За аналогією, в циклі типу "for (i = 0; i <max; i ++)" змінна i є ітераційним значенням, це не сама петля.
Білл Карвін

Я не знав, що ти можеш це зробити в SQL, Gracias.
Адам Ф

8

З огляду на наступні таблиці ..

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

Спробуйте цей sql ... (Це майже те саме, що писав Стівен Врігтон) Висновка полягає в тому, що ви в основному вибираєте з таблиці домену двічі в одному запиті та приєднуєтесь до результатів.

Select d1.dom_url, d2.dom_id from
review r, domain d1, domain d2
where d1.dom_id = r.rev_dom_from
and d2.dom_id = r.rev_dom_for

Якщо ви все-таки застрягли, будь ласка, будьте більш конкретні з тим, що ви не розумієте.


-1

Прочитайте це і спробуйте, це допоможе вам:

Таблиця1

column11,column12,column13,column14

Таблиця2

column21,column22,column23,column24


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21  INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22

table2asnew1 є екземпляром таблиці 2, з яким узгоджено table1.column11=table2asnew1.column21

і

table2asnew2 - це ще один екземпляр таблиці 2, з яким узгоджено table1.column12=table2asnew2.column22

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.