2013-05-15 90 views
0

我有兩個表:與內遇到問題加入SQL

騎單車= DobnameISO_id

國家= country_namegdp,​​,ISO_id

我需要查詢以獲取Cyclist.name,Country.country_name,Country.gdp,Country.population。

使用用戶輸入的兩個日期。這兩個日期用於搜索在日期之間出生的所有騎自行車者。

這是我試過到目前爲止:

SELECT Cyclist.name, Country.country_name, Country.gdp, Country.population 
FROM Cyclist 
INNER JOIN Country 
ON Cyclist.ISO_id = Country.ISO_id 
WHERE Cyclist.dob between '$date1' AND '$date2' 

但它不工作,我不知道爲什麼。

任何人都可以提供任何見解嗎?

+0

首先,檢查'$ date1'和'$ date2'值(如果你在查詢中的實際值替換它們在這裏還要好)。 – Leri

+0

如果在沒有「WHERE語句」的情況下執行查詢,該怎麼辦? 它返回任何東西嗎? 如果是,您的where語句是錯誤的。你爲什麼使用Cyclist.dob的報價? –

+0

@PLB我已將它們更改爲實際值。依然沒有。 – user2385273

回答

1

使用左連接從騎車人選擇沒事recods和擴大從國家的數據響應:

SELECT Cyclist.name, Country.country_name, Country.gdp, Country.population 
FROM Cyclist 
LEFT JOIN Country 
ON Cyclist.ISO_id = Country.ISO_id 
WHERE `Cyclist.dob` between '$date1' AND '$date2' 
+0

謝謝。我會這樣做的。 – user2385273

0

你在WHERE子句中,你需要單獨的封裝都騎自行車者和DOB工作封閉整個Cyclist.dob喜歡。

SELECT Cyclist.name, Country.country_name, Country.gdp, Country.population 
FROM Cyclist 
INNER JOIN Country 
ON Cyclist.ISO_id = Country.ISO_id 
WHERE `Cyclist`.`dob` between '$date1' AND '$date2' 
+0

謝謝你的回覆。但這不是問題。當我刪除WHERE子句時,它開始工作,但即使當我將實際值放入$ date1和$ date2時,它也沒有。 – user2385273

+0

當你刪除where子句時,你也刪除了我指出的問題,當我檢查mysql上的類似代碼時,如果你封閉了整個塊,它會給出錯誤。或者甚至可以完全忽略where子句中的反引號字符,並使用類似'WHERE Cyclist.dob ...之間的內容' –

2

您可以使用

SELECT Cyclist.name, Country.country_name, Country.gdp, Country.population 
FROM Cyclist 
LEFT JOIN Country 
ON Cyclist.ISO_id = Country.ISO_id 
Cyclist.dob>='$date1' and Cyclist.dob<='$date2'