2016-06-23 6 views
1

私はこのように2つのテーブルを持っています。2つのテーブルを結合することによってカウントする方法

表:家族

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

表:私は誰年齢0と4の間にメンバーをカウントしたい場合は、正しいクエリで何メンバーの詳細

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

「都市」に住んでいる?私はこのクエリを使用しようとしましたが、結果は正しくありません。正しい結果は、都市に、0歳から4歳の間に住んでいるアンドラだけから1になるはずです。助けてください。あなたはあなたの構文で

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 

に参加する必要がある

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

(あなたのクエリがcartesian productを生成しますので)、あなたは、where句でこれを追加することがあります。

しかし:あなたは本当にところで、JOIN構文

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索引を追加する必要があります。

関連する問題