2016-06-07 88 views
0

我有2个表中mariadb是治疗和付款。sql查询完全加入

处理:ID(INT(11)),treatment_name(VARCHAR(255)),treatment_date(日期)

的支付方式:ID(INT(11)),treatment_id(INT(11)),支付金额(十进制(10,2)),PAYMENT_DATE(日期)

我想列出从两个表中的记录给定日期范围,例如从2016年1月1日至2016年6月6日

1-如果治疗是在给定的日期范围内并有付款或者 2 - 如果治疗不在日期范围之间但是付款与付款日期之间的时间在给定日期范围之间。

任何人都可以帮我设置查询吗?

回答

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'; 
0

为了给你一个开始,下面将加入两个表,则需要根据日期添加过滤:

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

我相信你可以做其他你自己。

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# 

使用这种单查询。