0

誰かが私を助けてくれることを願っています。私は MySQL にかなり慣れていないので、そのすべての機能に完全に精通しているわけではありません。

次の形式のデータを含むスプレッドシートが提供されました。

子供の名前|性別| ドブ| クラス|親の名前|親の電話番号|親の住所

これを次の 3 つのテーブルに分けました。

Child_details データ型 必須キー
Child_id INT AUTO_INCREMENT NOT NULL プライマリ
Child_fname VARCHAR(15) NOT NULL     
Child_sname VARCHAR(15) NOT NULL     
性別 Enum(M,F) NOT NULL NOT NULL     
生年月日 NOT NULL NOT NULL     
親/介護者 ID INTEGER NOT NULL 外国


Parent_details データ型 必須キー
Parent_id INT AUTO_INCREMENT NOT NULL プライマリ
Parent_title CHAR(5)      
Paren _fname VARCHAR(15) NOT NULL     
Parent/_sname VARCHAR(15) NOT NULL     
親 _Add1 VARCHAR(25) NOT NULL     
親 _Add2 VARCHAR(25)          
親 _city VARCHAR(25)          
親 _Pcode VARCHAR(15) NOT NULL     
親 _phone VARCHAR(15) NOT NULL     


アクティビティ データ型 必須キー
Activity_name CHAR(8) NOT NULL     
Activity_day CHAR(5) NOT NULL     

次に、アクティビティ データを使用して点呼リストのブリッジング テーブルを作成しました。一部の子供は 1 つのクラスを行い、一部は 3 つすべてを行います。

スケジュール データ型 必須キー
Child_id INT NOT NULL 外部、複合
Activity_id INT NOT NULL 外部、複合

入力したデータが正しいかどうかを確認するために実行できるクエリを作成しようとしています。スプレッドシートと同じ形式で結果を表示できるようにしたい。これは私がこれまでに思いついたものです:

SELECT CONCAT_WS(' ',Child_fname,Child_sname) AS 'Child Name',
Child_gender AS 'Gender',
Child_dob AS 'DoB',
COUNT Activity_name AS Activities,
CONCAT_WS(' ',Parent_title,Parent_fname,Parent_sname) AS 'Parent/Carer name',
Parent_phone AS 'Parent/Carer phone',
CONCAT_WS(' ',Parent_add1,Parent_add2,Parent_city,Parent_pcode) AS 'Parent/Carer Address'
FROM Child,Activity,Parent;

しかし、私が得た結果は、各子供がすべての活動を行い、すべての活動を行っていることを示しています. 明らかな何かが欠けていますか、COUNT DISTINCT または GROUP BY を使用する必要がありますか、またはテーブルを間違って作成しましたか?

誰でも提供できる情報は大歓迎です。十分な情報を提供できたことを願っていますが、多すぎないようにしてください。

4

1 に答える 1

0

テーブルを結合する方法をMySQLに伝える必要があります(この情報がなければ、説明したように、各テーブルのすべての行を他のすべてのテーブルのすべての行と結合します):

SELECT
  ...
FROM
       Child
  JOIN Schedule USING (Child_id)
  JOIN Activity USING (Activity_id) -- does this column exist in Activity?
  JOIN Parent   USING (Parent_id)   -- does this column exist in Child?

SQL に関するいくつかのチュートリアルにJOIN従うことをお勧めします。

于 2012-04-27T14:12:06.917 に答える