0

我希望有人能帮助我。我对 MySQL 还很陌生,所以我并不完全精通它的所有功能。

我得到了一个电子表格,其中包含以下格式的数据:

孩子姓名 |性别| 出生日期| 班级|家长姓名|家长电话|家长地址

我将其分为 3 个表,其中包括:

Child_details 数据类型 必需的键
Child_id INT AUTO_INCREMENT NOT NULL 主要
Child_fname VARCHAR(15) 非空     
Child_sname VARCHAR(15) NOT NULL     
性别枚举(M,F) NOT NULL NOT NULL     
DoB DATE 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     
父/_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     

然后用活动数据为点名列表制作了一个桥接表。有的孩子上一节课,有的上三门课:

计划数据类型所需键
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 回答