Как вы присоединяетесь к одной таблице дважды в mysql?

У меня есть 2 таблицы. Один (домены) имеет идентификаторы домена и имена доменов (dom_id, dom_url).

другой содержит фактические данные, 2 из которых для столбцов требуются имена доменов TO и FROM. Поэтому у меня есть 2 столбца rev_dom_from и rev_dom_for, оба из которых хранят идентификатор имени домена из таблицы доменов.

Simple.

Теперь мне нужно фактически отобразить обе доменные имена на веб-странице. Я знаю, как отображать один или другой, через LEFT JOIN domains ON query.rev_dom_for = domains.dom_url запрос, а затем вы эхо отзываете dom_url, который будет выводить имя домена в столбце rev_dom_for.

Но как бы я сделал это для второго имени домена в столбце dom_rev_from?

Ответ 1

вы бы использовали другое соединение, что-то вроде этого:

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

ИЗМЕНИТЬ

Все, что вы делаете, несколько раз присоединяется к таблице. Посмотрите на запрос в сообщении: он выбирает значения из таблиц отзывов (aliased as rvw), эта таблица предоставляет вам 2 ссылки на таблицу домена (FOR и FROM).

В этот момент вам просто перейти в таблицу "Домен" в таблицу "Отзывы". Однажды (с псевдонимом D) для FOR и второй раз (с псевдонимом D) для FROM.

Затем в списке SELECT вы выберете поля DOM_URL из обоих LEFT JOINS таблицы DOMAIN, ссылаясь на них по псевдониму таблицы для каждого, объединенного в ссылку на таблицу Domains, и обозначите их как ToURL и FromUrl.

Подробнее о aliasing в SQL читайте здесь.

Ответ 2

Учитывая следующие таблицы.

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

Если вы все еще застряли, будьте более конкретными, именно так вы не понимаете.

Ответ 3

Прочитайте это и попробуйте, это поможет вам:

Таблица 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