使用JOIN选择特定日期

时间:2015-04-06 22:24:29

标签: mysql mysqli

Client包含last_nameemail列,而表Product包含emailexpiry_date13 row of records。此语法只能从Product表中正确选择2行。

SELECT * FROM `Product` WHERE expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) 
AND expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 + 1 DAY )

现在,我想将其加入Client表,以选择匹配last_name的{​​{1}}。不幸的是,下面的email语法会从JOIN表中选择所有13条记录。

Product

此语法也不起作用。选择SELECT * FROM `Product` JOIN `Client` ON product.email=client.email AND (expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) AND expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 + 1 DAY )) 表中的所有13行:

Product

我如何只选择2 SELECT * FROM ( SELECT * FROM `Product` WHERE expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) AND expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 +1 DAY ) ) A LEFT JOIN Client ON A.email=client.email WHERE A.expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) AND A.expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 +1 DAY ) 而不是全部13.我希望我能清楚地解释它。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您指定JOIN条件的方式,一切都匹配。您应该指定WHERE子句

SELECT * FROM `Product` JOIN `Client`
ON product.email=client.email
WHERE expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) 
   AND expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 + 1 DAY )

答案 1 :(得分:0)

您需要使用GROUP BY只获取2行而不是Product表中的所有行。例如:

SELECT * FROM `Product` JOIN `Client`
ON product.email=client.email
AND (expiry_date > DATE_ADD( CURRENT_DATE, INTERVAL 24 DAY ) 
AND expiry_date < DATE_ADD( CURRENT_DATE, INTERVAL 24 + 1 DAY )) 
GROUP BY expiry_date