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 사이의 회원을 계산하려면 올바른 쿼리가 무엇입니까 사람 '도시'에서 살고 있습니까? 이 쿼리를 사용해 보았지만 결과가 정확하지 않습니다. 정확한 결과는 도시에 살고 0 세에서 4 세 사이의 Andra 만 1이되어야합니다. 제발 도와주세요. (쿼리가 cartesian product을 생성하기 때문에)

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가 (이름)을 사용하여 member_details에 가입합니다' – 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 

에 가입해야합니다, 당신은 where 절에이를 추가 할 수 있습니다.

하지만 : 정말 구문을 가입 사용해야합니다

AND family_members.Name = member_details.Name 

그런데 , 나는 강력하게

+0

고맙습니다. :) –

0
(이름이 정말 독특한 것이 아닙니다) 당신의 테이블에 surrogate keys를 사용하는 것이 좋습니다 것입니다 EDIT

다음과 같이 데이터베이스를 다시 설계해야합니다.

---------------------------------- 
| 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는 인덱스를 추가해야합니다.

관련 문제