你如何join同一张桌子,两次,在MySQL中?

我有2桌子。 一个(域)具有域ID和域名(dom_id,dom_url)。

另一个包含实际数据,其中2个列需要TO和FROM域名。 所以我有两个列rev_dom_from和rev_dom_for,两者都存储了域名表的域名。

简单。

现在我需要在网页上实际显示两个域名。 我知道如何显示一个或另一个,通过LEFT JOIN域ON reviews.rev_dom_for = domains.dom_url查询,然后你回显出dom_url,这将在rev_dom_for列回显域名。

但是,我怎样才能使dom_rev_from列中的第二个域名得到回应呢?

你会使用另一个连接,沿着这些线:

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 

编辑

你所做的只是多次join表格。 查看post中的查询:它select评论表中的值(别名为rvw),该表为您提供2个对域表(FOR和FROM)的引用。

在这一点上,把域表离开join评论表是一件简单的事情。 一次(别名为toD)FOR,第二次(别名为FROMD)FROM。

然后,在SELECT列表中,您将从DOMAIN表的两个LEFT JOINS中selectDOM_URL字段,并通过引用到Domains表的每个表的别名引用它们,并将它们别名为ToURL和FromUrl。

有关SQL中别名的更多信息,请阅读此处 。

鉴于以下表格..

 Domain Table dom_id | dom_url Review Table rev_id | rev_dom_from | rev_dom_for 

试试这个SQL …(这几乎是斯蒂芬Wrighton上面写的)同样的事情诀窍是,你基本上从域表中select两次在同一个查询,并join结果。

 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

 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是由table1.column11=table2asnew1.column21匹配的表2的一个实例

table2asnew2是表2的另一个实例,它与table1.column12=table2asnew2.column22匹配