Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql将三个表连接到一个表_Mysql_Sql - Fatal编程技术网

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
将父项名称拆分为一列