Mysql将三个表连接到一个表
我有三张桌子家长,学生,学生家长' 家长Mysql将三个表连接到一个表,mysql,sql,Mysql,Sql,我有三张桌子家长,学生,学生家长' 家长 p_id p_名称 学生 s_id s_名称 学生家长 s_id p_id 我想用以下格式为报告功能创建一个新表 s_id | s_name | p_name_1 | p_name_2 由于两个记录是为一个学生创建的,比如母亲和父亲,所以我想用一个s_id将这两个记录放到一个表中。目前我有一个这样的表 p_id | s_id | s_name | p_name 01 | 01 | sam | jack 02 | 01
p_id
p_名称 学生
s_id
s_名称 学生家长
s_id
p_id 我想用以下格式为报告功能创建一个新表
s_id | s_name | p_name_1 | p_name_2
由于两个记录是为一个学生创建的,比如母亲和父亲,所以我想用一个s_id将这两个记录放到一个表中。目前我有一个这样的表
p_id | s_id | s_name | p_name
01 | 01 | sam | jack
02 | 01 | sam | jill
我希望表的结构如下
s_id | s_name | p_name_1 | p_name_2
01 | sam | jack | jill
我已经找过了,但找不到合适的解决办法
以下是我当前的sql语句:
SELECT s.student_id, s.first_name, s.last_name, c.first_name
FROM fsms_student s, fsms_student_parent_guardian b, fsms_parent_guardian c
WHERE b.student_id = s.student_id AND b.parent_guardian_id = c.parent_guardian_id
如果有人能为我提供解决方案,我将不胜感激。谢谢。为什么,您已经有了解决方案:
CREATE TABLE newTable
SELECT
s.student_id as s_id,
concat(s.first_name, " ",s.last_name) as s_name,
count(distinct b.parent_guardian_id) as parentCount,
GROUP_CONCAT(p_name)
FROM
fsms_student s, fsms_student_parent_guardian b, fsms_parent_guardian c
WHERE
s.student_id = b.student_id
AND b.parent_guardian_id = c.parent_guardian_id
GROUP BY 1,2
您是如何定义这些表的?(外键)主键是ID。我将编辑问题,而不是显示创建表(外键)时使用的语句。我拥有的第一个表的外键都是p_id和s_id。在新格式中,我只需要s_id和同一行中的父项的两个名称。这不是表本身,而是视图,或者只是查询的结果。现在,你如何决定哪位家长是第一位?仔细看一下显式连接语法。。。而且。。。在命名列时要小心并保持一致——这可能会让我们其他人感到困惑。姓是同一个人的姓。我想要的是下一个与stuent idOk对应的人的名字,现在我知道你想要什么了。请参阅上面更新的查询。不能将所有父项名称拆分为若干列,但可以使用
GROUP\u CONCAT
将父项名称拆分为一列