在MySQL中使用联接从多个表中选择数据

在MySQL中使用联接从多个表中选择数据,mysql,sql,Mysql,Sql,我有下列表格 用户: * id * name * role id * phone 学生 1: userid ( fk users.id) 2: course_id 职员 课程 1: COURSE_ID 1:COURSENAME 我需要找到与某个号码关联的所有帐户 我需要的名称,用户名,roleid,courseid,corsename,staffid,提供手机 我已经编写了这个查询,但它返回的结果为零 SELECT users.name, users.id, staff.user_id,

我有下列表格

用户:

* id
* name
* role id
* phone
学生

1: userid ( fk users.id)
2: course_id
职员

课程

1: COURSE_ID
1:COURSENAME
我需要找到与某个号码关联的所有帐户

我需要的名称,用户名,roleid,courseid,corsename,staffid,提供手机

我已经编写了这个查询,但它返回的结果为零

SELECT users.name, users.id, staff.user_id, students.course_id, users.role_id, courses.course_title FROM users INNER JOIN students ON users.id = students.user_id INNER JOIN staff ON staff.user_id = users.id INNER JOIN courses ON courses.id = students.course_id WHERE users.phone = '9495990028'

限制为0,30

对于课程表,我将id与来自学生和教职员工的课程id进行检查

SELECT name, s.userid, roleid, s.course_id, c.coursename, st.staff_id
FROM USERS u
INNER JOIN STUDENTS s ON s.userid = u.id
INNER JOIN STAFF st ON st.staff_id = u.id
INNER JOIN COURSES c ON c.course_id = s.course_id AND c.course_id = st.course_id
WHERE u.phone = ?

对于课程表,我将id与来自学生和教职员工的课程id进行核对

SELECT name, s.userid, roleid, s.course_id, c.coursename, st.staff_id
FROM USERS u
INNER JOIN STUDENTS s ON s.userid = u.id
INNER JOIN STAFF st ON st.staff_id = u.id
INNER JOIN COURSES c ON c.course_id = s.course_id AND c.course_id = st.course_id
WHERE u.phone = ?

尝试使用union运算符:

SELECT name, s.userid, roleid, s.course_id, c.coursename, null
FROM USERS u
INNER JOIN STUDENTS s 
INNER JOIN COURSES c
ON s.userid = u.id AND c.course_id = s.course_id
WHERE u.phone = ?
UNION 
SELECT name, null, roleid, s.course_id, c.coursename, s.staff_id
FROM USERS u
INNER JOIN STAFF s
INNER JOIN COURSES c
ON s.staff_id = u.id AND c.course_id = s.course_id
WHERE u.phone = ?;

尝试使用union运算符:

SELECT name, s.userid, roleid, s.course_id, c.coursename, null
FROM USERS u
INNER JOIN STUDENTS s 
INNER JOIN COURSES c
ON s.userid = u.id AND c.course_id = s.course_id
WHERE u.phone = ?
UNION 
SELECT name, null, roleid, s.course_id, c.coursename, s.staff_id
FROM USERS u
INNER JOIN STAFF s
INNER JOIN COURSES c
ON s.staff_id = u.id AND c.course_id = s.course_id
WHERE u.phone = ?;


有些字段不一致。您在每个表中提到的字段与您在本问题末尾提到的字段略有不同。请至少发布一个尝试的解决方案,说明您迄今为止为解决此问题所做的努力。我只提供一个手机号码。我需要获得用户的详细信息。用户可以是学生或教师。这必须连接到课程表才能获取用户的课程详细信息。这是我的要求“选择users.name、users.id、staff.user\u id、students.course\u id、users.role\u id、,courses.course\u title FROM users internal JOIN student ON users.id=students.user\u id internal JOIN staff ON staff.user\u id=users.id internal JOIN courses ON courses.id=students.course\u id WHERE users.phone='9495990028'限制0,30'某些字段不一致。您在每个表中提到的字段与您在本问题末尾提到的字段略有不同。请至少发布一个尝试的解决方案,说明您迄今为止为解决此问题所做的努力。我只提供一个手机号码。我需要获得用户的详细信息。用户可以是学生或教师。这必须连接到课程表才能获取用户的课程详细信息。这是我的要求“选择users.name、users.id、staff.user\u id、students.course\u id、users.role\u id、,courses.course\u title FROM users internal JOIN students ON users.id=students.user\u id internal JOIN staff ON staff.user\u id=users.id=internal JOIN courses ON courses.id=students.course\u id WHERE users.phone='9495990028'LIMIT 0,30'否我想为同一手机号码搜索学生和员工。假设一位老师是家长,教的是同一个班级,那么任何表中都没有手机号码字段。问问题时请更清楚。啊,对不起,你是说用户中的电话字段,对吗?是的。没关系。我将竭尽全力解决这个问题。将发布我的查询,以便您了解我想要获取的信息否我想搜索学生和教职员工的同一手机号码。假设一位老师是家长,教的是同一个班级,那么任何表中都没有手机号码字段。问问题时请更清楚。啊,对不起,你是说用户中的电话字段,对吗?是的。没关系。我将竭尽全力解决这个问题。我将发布我的查询,以便您能够理解我的目的。我已经按照您提到的列表列出了这些列。根据UNION规则子句,两个查询都应返回相同数量的列。但是,如果您希望从学生表中获取userid或从staff表中获取staffid,则可以删除null。确定..我已删除..但在上述代码中您没有加入课程表。我想知道你为什么使用AND子句。查询在没有AND子句的情况下工作。这是AND子句吗,有什么区别吗。。我的坏..忘了放课程表..但是查询是如何工作的?不管怎样,编辑查询…和子句的需要是什么..和c.Course\u id=s.Course\u id'。。没有AND子句也可以。请分享你的意思是说有“,”,你是怎么尝试的。你能分享你尝试的条件吗?我已经按照你提到的列表列出了列。根据UNION规则子句,两个查询都应返回相同数量的列。但是,如果您希望从学生表中获取userid或从staff表中获取staffid,则可以删除null。确定..我已删除..但在上述代码中您没有加入课程表。我想知道你为什么使用AND子句。查询在没有AND子句的情况下工作。这是AND子句吗,有什么区别吗。。我的坏..忘了放课程表..但是查询是如何工作的?不管怎样,编辑查询…和子句的需要是什么..和c.Course\u id=s.Course\u id'。。没有AND子句也能用。请分享你的意思是用“,”来表达,你是怎么尝试的。你能分享一下你尝试过的条件吗