2013-07-25 4 views
1

У меня есть 2 таблицы в моей базе данных. Пользователи таблицы и таблицы.mysql query возвращает только один результат из моей базы данных

users(user_id, surname, email) 
profile(profile_id, country, user_id) 

user_id в профиле таблицы, это FK (из таблицы пользователей). У меня есть следующий запрос, чтобы выбрать все фамилии «кузнец» из моей базы данных, которые из страны «США». Это мой запрос:

SELECT u.name, 
u.surname, 
u.email, 
u.user_id, 
p.user_id 
FROM users u 
INNER JOIN profile p ON p.country = 'USA' 
WHERE u.surname = 'smith' AND u.user_id = p.user_id 

этот запрос работает нормально, но проблема заключается в том, что возвращает только один результат, а не все результаты из моей базы данных (люди с фамилией кузнецом, которые из США). Любая идея, где это может быть неправильно и как ее исправить?

ответ

1

Вы должны поставить u.user_id = p.user_id состояние с ON condition, потому что вы хотите применить JOIN на поле «user_id». И where clause должно иметь оставшееся условие.

SELECT u.name, 
     u.surname, 
     u.email, 
     u.user_id, 
     p.user_id 
FROM users u 
INNER JOIN profile p ON u.user_id = p.user_id 
WHERE u.surname = 'smith' And p.country = 'USA' 

Вы можете прочитать о INNER JOINS

0

Используйте только те столбцы в вашем join on условиях, которые подходят для соединения. Столбцы, связывающие две таблицы вместе. И положим остальные в статье where. Это должно работать:

SELECT u.name, 
     u.surname, 
     u.email, 
     u.user_id, 
     p.user_id 
FROM users u 
INNER JOIN profile p ON u.user_id = p.user_id 
WHERE p.country = 'USA' 
AND u.surname = 'smith' 

Это также лучше для удобства чтения. Вы можете прочитать это следующим образом:

ВЫБЕРИТЕ эти столбцы от пользователей таблицы. ПРИСОЕДИНИТЕСЬ также к профилю таблицы В этом 2 столбцах. После этого отфильтруйте данные и верните только записи, где эти условия выполнены.