【问题标题】:Join query results in MySQL在 MySQL 中加入查询结果
【发布时间】:2021-08-06 16:53:01
【问题描述】:

我正在使用 MySQL 数据库。

我有三张桌子。 1、2、3

我想将表 2 和 3 连接到表 1 的结果加入一个 id。我想保留表 1 的所有条目,并在调用 id 上加入 2 和 3 的结果后,它不匹配的地方有一个空值。

Table 1 has callid
Table 2 has callid and invoiceid
Table 3 has invoiceid and customerid

因此,在 invoiceid 上加入表 2 和 3 并按 customerid = xyz 过滤,然后将结果加入到 callid 上的表 1。表 1 还会有一个 Where 子句过滤日期

结果应该是这样的

callid   customerid
  123       xyz
  124       xyz
  125       null
  126       xyz

提前谢谢你

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    我想你是在描述left join

    select . . .
    from table1 t1 left join
         table2 t2
         on t1.callid = t2.callid left join
         table3 t3
         on t3.invoiceid = t2.invoiceid;
    

    您可以在 on 子句中过滤客户 ID:

    from table1 t1 left join
         table2 t2
         on t1.callid = t2.callid left join
         table3 t3
         on t3.invoiceid = t2.invoiceid and t3.customerid = ?;
    

    但是,这可能不是您想要的。您可能想要过滤内部连接,然后执行 left join:

    select . . .
    from table1 t1 left join
         (table2 t2 join
          table3 t3
          on t3.invoiceid = t2.invoiceid
         )
         on t1.callid = t2.callid and
            t3.customerid = ?
    

    【讨论】:

    • 感谢您这么快回复。我已经尝试使用左连接,但我忘了提到表 2 callid 不是不同的,通过加入 2 和 3 将使结果由于客户过滤器而具有不同的 callid
    • 您先生是个天才。谢谢!它有效
    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2013-04-16
    • 2017-03-07
    • 2011-09-10
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多