【问题标题】:How do you join on the same table, twice, in mysql?你如何在 mysql 中加入同一张表,两次?
【发布时间】:2010-09-17 00:42:48
【问题描述】:

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

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

简单。

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

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

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你会使用另一个连接,类似于以下内容:

    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 列表中,您将从 DOMAIN 表的两个 LEFT JOINS 中选择 DOM_URL 字段,通过引用 Domains 表的每个连接的表别名来引用它们,并将它们别名为 ToURL 和 FromUrl。

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

    【讨论】:

    • 诀窍是您已经用名称“AS to”和“AS from”标识了每个 JOIN,以便您可以在 SELECT 中使用它们。
    • 使用非关键字作为表名会澄清。另外,别名时使用“as”关键字。
    • 原谅我,但我仍然不明白这应该如何工作。这 2 个表是:域(dom_id、dom_url)和评论(rev_id、rev_dom_from、rev_dom_for)。如果有人能写出准确的查询以便我掌握其中的窍门,那就太好了,因为我不知道我必须编辑什么。
    • 将别名视为引用表中的行,而不是表本身。以此类推,在“for(i=0;i
    • 我不知道你可以在 SQL 中做到这一点,Gracias。
    【解决方案2】:

    鉴于下表..

    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
      

      table2asnew1是表2的一个实例,与table1.column11=table2asnew1.column21匹配

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 2018-07-26
        相关资源
        最近更新 更多