如何在mysql中对同一张表进行两次连接?

120

我有两张表,一张(domains)存储域名ID和域名(dom_id、dom_url)。

另一张表存储实际数据,其中的2个列需要一个“FROM”和一个“TO”域名。所以我有2个列rev_dom_from和rev_dom_for,它们都存储自domains表中的域名ID。

很简单。

现在我需要在网页上显示这两个域名。我知道如何显示其中一个,通过LEFT JOIN domains ON reviews.rev_dom_for = domains.dom_url查询,然后你可以输出dom_url,从而输出rev_dom_for列中的域名。

但是,如何输出第二个域名,在dom_rev_from列中呢?

3个回答

186

你需要使用另一个连接,类似于以下方式:

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

编辑:

你所做的只是在表格中多次连接。看一下帖子中的查询:它从Reviews表(别名为rvw)选择值,该表为你提供了2个对Domain表的引用(一个FOR和一个FROM)。

此时,将Domain表左连接到Reviews表是一件简单的事情。第一次(别名为toD)为FOR,第二次(别名为fromD)为FROM。

然后在SELECT列表中,您将从连接到Domains表的每个表别名引用中的BOTH LEFT JOINS的DOMAIN表中选择DOM_URL字段,并将其别名为ToURL和FromUrl。

有关SQL中别名的更多信息,请阅读这里


5
关键在于您已经为每个JOIN分别使用了'AS to' 和 'AS from'的名称,以便您可以在SELECT语句中使用它们。 - Matthew Smith
1
使用非关键字作为表名可以更清晰地表达意思。此外,在别名时使用 "as" 关键字。 - TheSoftwareJedi
请原谅我,但我仍然不明白这应该如何工作。这两个表是:domains(dom_id,dom_url)和reviews(rev_id,rev_dom_from,rev_dom_for)。如果有人能写出确切的查询,让我能够掌握它,那就太好了,因为我不知道我需要编辑什么。 - user15063
1
将别名视为引用表中的行,而不是表本身。类比地,在像“for(i = 0; i <max; i ++)”这样的循环中,变量i是迭代值,而不是循环本身。 - Bill Karwin
我不知道在SQL中可以这样做,谢谢。 - Adam Fowler
那是一件美妙的事情。 - Oliver Holmberg

8

考虑以下表格..

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

尝试这个 SQL(与 Stephen Wrighton 上面写的基本相同)。诀窍在于你基本上是在同一个查询中两次从域表中进行选择,并连接结果。
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
是table 2的一个实例,其匹配条件为table1.column11=table2asnew1.column21

和 是table 2的另一个实例,其匹配条件为table1.column12=table2asnew2.column22


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接