2011-01-14 12 views
0

各活動のために登録された各ジェンダーの子供の数を示す活動のリストが必要です。1つのクエリで2つのテーブルからデータを取得するにはどうすればよいですか?

構造:

CREATE TABLE Child(
child_id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, 
pc_id INTEGER NOT NULL, 
child_fname VARCHAR(20) NOT NULL, 
child_lname VARCHAR(20) NOT NULL, 
child_dob DATE NOT NULL, 
child_gender ENUM ('F','M') DEFAULT 'F' NOT NULL, 
CONSTRAINT FOREIGN KEY(pc_id) REFERENCES Parent_Carer(pc_id)) 
ENGINE=InnoDB; 

CREATE TABLE Child_Activity(
child_id INTEGER NOT NULL, 
activity_name_id ENUM('Art','Football','IT') DEFAULT 'IT' NOT NULL, 
activity_day ENUM('Tuesday','Wednesday','Thursday') NOT NULL, 
CONSTRAINT PRIMARY KEY(child_id,activity_name_id), 
CONSTRAINT FOREIGN KEY(child_id)references Child(child_id), 
CONSTRAINT FOREIGN KEY(activity_name_id)references Activity(activity_name_id)) 
ENGINE=InnoDB; 

私は

SELECT activity_name_id, 
     COUNT(*)  AS 'Number of Children', 
     child_gender AS 'Childs Gender' 
FROM child c, 
     child_activity ca 
WHERE c.child_id = ca.child_id 
GROUP BY child_gender, 
      activity_name_id; 

ありがとうございました。このクエリを持っています。

+0

私はお詫び申し上げます。私はその質問を指定しなかった。私が必要とするのは、各活動のために登録された各ジェンダーの子どもの数を示す活動のリストです。ありがとうございました。 –

答えて

2

Select Child_Activity.activity_name_id, count(child_m.id) as boys, count(child_f.id) as girls, 
FROM Child_Activity 
INNER JOIN Child as child_m 
ON (child_m.child_id = Child_Activity.child_id AND child_m.gender = 'M') 
INNER JOIN Child child_f 
ON (child_f.child_id = Child_Activity.child_id AND child_f.gender = 'F') 

たとえば私は、これは

+0

私は謝る。私はその質問を指定しなかった。私が必要とするのは、各活動のために登録された各ジェンダーの子どもの数を示す活動のリストです。ありがとうございます –

+0

まあ、私はこのクエリを持っています:SELECT activity_name_id、COUNT(*) '子の数'、child_gender 'Childs Gender' 子供C、Child_Activity CA WHERE C.child_id = CA.child_id GROUP BY child_gender 、activity_name_id; –

+1

@Linards - そして、そのクエリはあなたが必要とするものですか?なぜそうならないのでしょうか? –

1

使用joins

SELECT * FROM Child AS c 
JOIN Child _Activity as ca 
ON c.child_id = ca.child_id 
1

Googleのより多くの例については、「MySQLのテーブルの結合の作品を願っています。以下のフィールドを返すフィールドの名前に置き換える必要があります。

SELECT fields FROM Child AS C 
INNER JOIN Child_Activity AS CA 
ON CA.child_id = C.child_id 
関連する問題