我希望有人可以帮助我。我对MySQL很陌生,所以我并不完全了解它的所有功能。
我收到了一份包含格式数据的电子表格:
child Name |Gender| dob| class|Parent name|parent phone|parent address
我将其分为3个表格,其中包括:
Child_details Datatype Required Key Child_id INT AUTO_INCREMENT NOT NULL Primary Child_fname VARCHAR(15) NOT NULL Child_sname VARCHAR(15) NOT NULL Gender Enum(M,F) NOT NULL NOT NULL DoB DATE NOT NULL NOT NULL Parent/Carer id INTEGER NOT NULL Foreign Parent_details Datatype Required Key Parent_id INT AUTO_INCREMENT NOT NULL Primary Parent_title CHAR(5) Paren _fname VARCHAR(15) NOT NULL Parent/_sname VARCHAR(15) NOT NULL Parent _Add1 VARCHAR(25) NOT NULL Parent _Add2 VARCHAR(25) Parent _city VARCHAR(25) Parent _Pcode VARCHAR(15) NOT NULL Parent _phone VARCHAR(15) NOT NULL Activity Datatype Required Key Activity_name CHAR(8) NOT NULL Activity_day CHAR(5) NOT NULL
然后为包含活动数据的滚动调用列表创建了一个桥接表。有些孩子做了一个班级,有些孩子做了三个班级:
Schedule Datatype Required Key Child_id INT NOT NULL Foreign, Composite Activity_id INT NOT NULL Foreign, Composite
我正在尝试编写一个可以运行的查询来检查我输入的数据是否正确。我希望能够以与电子表格相同的格式查看结果。这是我到目前为止所提出的:
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,还是我创建了错误的表?
任何人都能提供的任何信息都将不胜感激。 我希望我提供了足够的信息,但不是太多。
答案 0 :(得分: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?
您可能想要关注一些tutorials on SQL JOIN
。