你如何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
匹配