2013-05-15 54 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'