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

110

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

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

Просто.

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

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


источник

Ответы:

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 ссылки на таблицу домена (FOR и FROM).

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

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

Дополнительную информацию о псевдонимах в SQL читайте здесь .

Стивен Райтон
источник
5
Хитрость заключается в том, что вы определили каждый JOIN с именем «AS to» и «AS from», чтобы вы могли использовать их в SELECT.
Мэтью Смит,
1
использование не ключевого слова для имени таблицы проясняет ситуацию. кроме того, используйте ключевое слово as при наложении псевдонимов.
TheSoftwareJedi,
Простите, но я до сих пор не понимаю, как это должно работать. Две таблицы: домены (dom_id, dom_url) и обзоры (rev_id, rev_dom_from, rev_dom_for). Если бы кто-то мог написать точный запрос, чтобы я мог понять его, это было бы здорово, потому что я понятия не имею, что мне нужно редактировать.
1
Думайте о псевдонимах как о ссылках на строки в таблице, а не на саму таблицу. По аналогии, в цикле типа «for (i = 0; i <max; i ++)» переменная i является повторяющимся значением, а не самим циклом.
Билл Карвин,
Я не знал, что вы можете сделать это в SQL, Грасиас.
Адам Ф
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

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

делюкс247
источник
-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

Ашекур Рахман молла Асик
источник