2015-04-06 63 views
1

Client包含last_nameemail柱而表Product包含email並用13 row of recordsexpiry_date柱特定日期。該語法正確地從Product表中正確選擇了2行。選擇與JOIN

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匹配email。不幸的是,我的JOIN語法如下,從Product表中選擇所有13條記錄。

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)) 

此語法也不起作用。從Product表中的所有13行選擇:

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) 

如何選擇只有2 last_name而不是所有13我希望我解釋清楚了。提前致謝。

+0

也許它會幫助你提供樣本數據。 – Minh

回答

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) 
+0

同樣,我有13行而不是2。 – sg552

0

您需要使用GROUP BYProduct表中只得到2行,而不是所有行。例如:

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