2016-06-23 3 views
1

У меня есть 2 таблицы, как это.Как считать, соединяя две таблицы

Таблица: Члены семьи

---------------------------------- 
|Address     | Name | 
---------------------------------- 
|North Jakarta City  | Andra | 
|North Jakarta City  | Halim | 
|South Jakarta City  | Irma | 
|Thousand Island Village | Dian | 
---------------------------------- 

Таблица: Детали Член

--------------- 
| Name | Age | 
--------------- 
| Andra | 1 | 
| Halim | 50 | 
| Irma | 20 | 
| Dian | 4 | 
--------------- 

Что такое правильный запрос, если я хочу, чтобы подсчитать пользователей в возрасте 0 и 4, которые жить в «городе»? Я попытался использовать этот запрос, но результат неверен. Правильный результат должен быть 1, поскольку только Андра, которая живет в городе и в возрасте от 0 до 4. Пожалуйста, помогите мне.

SELECT COUNT(family_members.name) AS total FROM family_members, member_details 
WHERE family_members.address LIKE '%City%' AND member_details.age BETWEEN 0 AND 4 
+0

'FROM family_members join member_details using (Name)' – splash58

ответ

4

Вам необходимо объединение

SELECT COUNT(fm.name) AS total 
FROM family_members fm 
Join member_details md on md.Name = fm.Name 
WHERE fm.address LIKE '%City%' AND md.age BETWEEN 0 AND 4 

с вами синтаксис, вы можете добавить это в ИНЕКЕ (потому что ваш запрос будет генерировать cartesian product).

НО: вы действительно должны использовать синтаксис объединения

AND family_members.Name = member_details.Name 

EDIT Кстати, я бы настоятельно рекомендуем использовать surrogate keys в ваших таблицах (название не очень-то уникальное)

+0

Спасибо, что работает :) –

0

Вы должны перепланировать вашу базу данных так:

---------------------------------- 
| user_id | Name | Age | city_id | 
---------------------------------- 
| 1 | Andra | 1 | 1 | 
| 2 | Halim | 50 | 1 | 
| 3 | Irma | 20 | 1 | 
| 4 | Dian | 4 | 2 | 
---------------------------------- 


------------------------------------ 
|city_name    | city_id | 
------------------------------------ 
|North Jakarta City  | 1  | 
|Thousand Island Village | 2  | 
------------------------------------ 


SELECT COUNT(*) AS total 
FROM family_member 
JOIN city on family_member.city_id = city.city_id 
WHERE city.city_name= 'City' AND family_member.age BETWEEN 0 AND 4; 

Также y ou должен добавлять индексы.

Смежные вопросы