2012-12-02 162 views
0

我正在創建一個用於測試腳本的模擬電子商務數據庫;我想運行下面的代碼,但還包括一個進一步的聲明,以根據失效日期選擇卡。MySQL根據日期範圍加入

SELECT customerCard.cardNumber, customer.firstName, customer.eMailAddress, customer.lastName, cardType, expiryDate 
FROM customerCard 
LEFT JOIN customer 
USING (eMailAddress) 
LEFT JOIN card 
USING (cardNumber) 
WHERE card.Expiry =< DATE_FORMAT(NOW(),'%m-%Y') 
ORDER BY `customerCard`.`cardNumber` ASC 

我得到一個與WHERE語句一行的錯誤 - 我該如何解決這個問題?什麼是正確的語法?

+0

請問您可以向我們展示您的表格模式嗎? – bonCodigo

+0

你可以使用'ON'運行它,所以我們可以縮小你在哪裏得到的問題。 – bonCodigo

+0

我認爲問題出在你的日期格式上。 MySQL預計日期格式爲YYYY-MM-DD,而不是MM-YYYY。另外,如果你正在做一個左連接,你可能不希望在WHERE子句中有該表的列,因爲這會過濾掉左連接應該包含的所有空行(除非你沒有做過'真的想要一個左連接)。 – Barmar

回答

0

我從你的幫助上述計算出正確的MySQL查詢語句。

SELECT customerCard.cardNumber, customer.firstName, customer.eMailAddress, customer.lastName, cardType, expiryDate 
FROM customerCard 
LEFT JOIN customer 
USING (eMailAddress) 
LEFT JOIN card 
USING (cardNumber) 
WHERE DATE_FORMAT(card.expiryDate, '%y-%m-%d') <= DATE_FORMAT( 
CURRENT_TIMESTAMP , '%y-%m-%d') 
ORDER BY `customerCard`.`cardNumber` ASC 
LIMIT 0 , 30 
1

請嘗試以下操作:由於沒有提供表格模式/樣本數據,因此代碼主要基於假設。如您的有效日期是像'mm-yyyy' format

SELECT customerCard.cardNumber, customer.firstName, 
customer.eMailAddress, customer.lastName, cardType, expiryDate 
FROM customerCard CC 
LEFT JOIN customer CO 
ON CC.eMailAddress = CO.eMailAddress 
LEFT JOIN card CD 
ON CO.cardNumber = CD.cardNumber 
WHERE DATE_FORMAT(CD.Expiry,'%m-%Y') =< DATE_FORMAT(NOW(),'%m-%Y') -- put both in same format 
ORDER BY CC.cardNumber ASC 
+0

如果有疑問,最好擴展你的語法,並分別把每個連接(分成小塊)看看數據返回。 – bonCodigo