Как вы присоединяетесь к одному и тому же столу дважды в mysql? - PullRequest
105 голосов
/ 14 октября 2008

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

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

Simple.

Теперь мне нужно отобразить оба доменных имени на веб-странице. Я знаю, как отобразить одно или другое, с помощью запроса ВЛЕВОЕ СОЕДИНЕНИЕ доменов в поле reviews.rev_dom_for = domains.dom_url, а затем выведите dom_url, который отобразит имя домена в столбце rev_dom_for.

Но как мне сделать так, чтобы оно отображало второе доменное имя в столбце dom_rev_from?

Ответы [ 3 ]

159 голосов
/ 14 октября 2008

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

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

EDIT

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

На данный момент легко присоединить таблицу доменов к таблице отзывов. Один раз (с псевдонимом toD) для FOR и второй (с псевдонимом fromD) для FROM.

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

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

8 голосов
/ 14 октября 2008

С учетом следующих таблиц ..

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

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

0 голосов
/ 09 февраля 2013

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

Table1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...