我在mariadb有两张桌子,分别是治疗和付款。
治疗:id(int(11)),treatment_name(varchar(255)),treatment_date(date)
付款:id(int(11)),treatment_id(int(11)),payment_amount(十进制(10,2)),payment_date(日期)
我想列出两个表中给定日期范围的记录,例如2016-01-01至2016-06-06
1 - 如果治疗处于给定日期范围之间且已付款或 2 - 如果治疗不在日期范围之间但是付款日期在给定日期范围之间。
任何人都可以帮我设置查询吗?
答案 0 :(得分: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';
答案 1 :(得分:1)
这可以使用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#
将其用作单个查询。
答案 2 :(得分:0)
为了给你一个开始,以下将加入两个表,你需要根据日期添加你的过滤:
SELECT *
FROM Treatments as t1, Payments as t2
WHERE t1.id = t2.treatment_id;
我相信你可以自己完成剩下的工作。