【问题标题】:Sql query full joinsql查询全连接
【发布时间】:2016-10-07 06:16:24
【问题描述】:

我在 mariadb 中有两张表,分别是治疗和付款。

治疗:id(int(11))、treatment_name(varchar(255))、treatment_date(date)

付款:id(int(11))、treatment_id(int(11))、payment_amount(decimal(10,2))、payment_date(date)

我想列出给定日期范围内两个表中的记录,例如从 2016-01-01 到 2016-06-06

1-如果治疗在给定的日期范围内并且有付款或 2-如果治疗不在日期范围内,但付款日期在给定日期范围内。

谁能帮我设置查询?

【问题讨论】:

    标签: php sql mariadb full-outer-join


    【解决方案1】:

    首先,以下将连接两个表,您需要添加基于日期的过滤:

    SELECT *
    FROM Treatments as t1, Payments as t2
    WHERE t1.id = t2.treatment_id;
    

    我相信你可以自己做剩下的事情。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您不需要full outer join。您只需要一个 inner join 以及正确的 where 子句:

      select t.*, p.*
      from treatments t inner join
           payments p
           on t.id = p.treatment_id
      where t.treatment_date between '2016-01-01' and '2016-06-06' or
            p.payment_date between '2016-01-01' and '2016-06-06';
      

      【讨论】:

        【解决方案3】:

        这可以使用 UNION 来完成,如下所示,

        SELECT * FROM Treatments WHERE treatment_date BETWEEN #01/01/2016# AND #06/06/2016#
        UNION
        SELECT * FROM  Payments WHERE treatment_date BETWEEN #01/01/2016# AND #06/06/2016#
        

        将其用作单个查询。

        【讨论】:

          猜你喜欢
          • 2018-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-18
          相关资源
          最近更新 更多