2013-05-15 3 views
0

У меня есть две таблицы:Возникли проблемы с внутренним соединением SQL

велосипедист = Dob, name, ISO_id

Страна = country_name, gdp, population, 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-Statement». Он что-то возвращает? Если да, ваше утверждение 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

Вы вложили всю 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, она выдавала ошибку, если вы вложили весь блок. Или даже вы можете полностью игнорировать символ backtick в where 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' 
Смежные вопросы