mysql两个表在一个查询中有不同的记录

时间:2014-01-04 10:07:30

标签: mysql sql

需要显示特定用户在该目标月份完成了多少billing_amount? 我有两个表,一个是目标,另一个是closure_emp。

SELECT fk_user_id,target_month,target 
FROM `target` 
WHERE fk_user_id='31' and target_month > DATE_SUB(now(), INTERVAL 6 MONTH)

这显示了6条记录

fk_user_id     target_month  target 
31           2013-08-01  100000
31           2013-09-01  100000
31           2013-10-01  120000
31           2013-11-01  120000
31           2013-12-01  120000

SELECT * 
FROM `closure_employee` 
WHERE ce_recruiter_id='31' and offer_date > DATE_SUB(now(), INTERVAL 7 MONTH)

这显示了2条记录

  user_id billing_amount offer_date     joining_date    
    31     390000     2013-08-30    2-09-2013
    31     208354     2013-09-30    25-11-2013

我需要一个查询来将表格显示在一个

 fk_user_id  target_month    target  user_id  billing_amount
    31      2013-08-01   100000   31          390000
    31      2013-09-01   100000   31          208354
    31      2013-10-01   120000   31            null
    31      2013-11-01   120000   31            null
    31      2013-12-01   120000   31            null

请帮帮我。

2 个答案:

答案 0 :(得分:2)

您似乎可以在表格之间使用LEFT JOIN来获得结果。由于您要返回target表中的所有行,然后LEFT JOIN上的closure_employee表格会user_id

要为billing_amount中的每一行指定正确的target,您需要使用month()target_month的{​​{1}}值 - 这也是你加入条件的一部分。

查询类似于以下内容:

offer_date

SQL Fiddle with Demo。您会注意到返回前7个月的select t.fk_user_id, t.target_month, t.target, e.user_id, e.billing_amount from target t left join closure_employee e on t.fk_user_id = e.user_id and month(t.target_month) = month(e.offer_date) and e.offer_date > DATE_SUB(now(), INTERVAL 7 MONTH) where t.target_month > DATE_SUB(now(), INTERVAL 6 MONTH); 过滤器已添加到连接条件而不是where子句中 - 这样做仍将返回该时间范围内offer_date的行,但它也将返回closure_employee表中所有行,这似乎是您想要的行为。

如果您需要按targetce_recruiter_id添加过滤器,则可以将上述查询更改为:

fk_user_id

答案 1 :(得分:-1)

 SELECT 
     t1.fk_user_id, t1.target_month, t1.target, t2.billing_amount 
 FROM 
     target AS t1, closure_employee AS t2
 WHERE 
     t1.fk_user_id = 31 AND t2.user_id = 31
     AND
     t1.target_month > DATE_SUB(now(), INTERVAL 6 MONTH);

希望有帮助(并且有效 - 不在我的脑海中!

这假设您的查询的fk_user_id = user_id

您还应该查看如何在表格上使用JOIN -

http://dev.mysql.com/doc/refman/5.0/en/join.html

然而,您可能希望从一个更简单的示例开始,以了解它!