您如何在mysql的同一张表上两次连接?


110

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

另一个包含实际数据,其中2列需要TO和FROM域名。因此,我有两列rev_dom_from和rev_dom_for,它们都存储来自domains表的域名ID。

简单。

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

但是,如何使它在dom_rev_from列中回显第二个域名?

mysql 

Answers:


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

编辑

您要做的就是多次加入表中。查看帖子中的查询:它从Reviews表(别名为rvw)中选择值,该表为您提供了对Domain表的两个引用(FOR和FROM)。

此时,只需将Domain表加入Reviews表即可。FOR一次(别名为toD),FROM再次(别名fromD)。

然后,在SELECT列表中,您将从DOMAIN表的两个LEFT JOINS中选择DOM_URL字段,并通过表别名为每个连接到Domains表的联接使用表别名进行引用,并将它们作为ToURL和FromUrl进行别名。

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


5
诀窍是,您已用名称“ AS to”和“ AS from”标识了每个JOIN,以便可以在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中做到这一点,Gracias。
亚当F

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

如果您仍然被卡住,请更确切地说是您不理解。


-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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.