【问题标题】:Select values from either tables从任一表中选择值
【发布时间】:2014-09-05 15:46:53
【问题描述】:

我使用 mySQL 并试图查找一个表或另一个表中的行。 以下是表格及其字段:

user: id(PK), email, password, is_teacher

teacher: id, no_teacher(PK), name, id_group, no_class
teacher_information:no_teacher, cell_phone, SSN, email 

student: id, no_student(PK), name, id_group, no_class
student_information:cell_phone, email, grade, no_student

user_role: id, id_role(PK)

group_leader: id_group, id_role
group_member: id_group, id_role

group: id_group(PK), name 

每个用户(教师或学生)可以是组中的领导者或成员(不能同时是成员),并且任何用户都可以属于不同的组。 我想要的是列出参与特定组的每个人的姓名和电子邮件。 任何人都可以帮我获取此场景的 sql 查询吗?

【问题讨论】:

  • 您的意思是希望任何组的每个成员都在组表中有记录,还是要过滤特定组?
  • 尽量避免使用保留字作为表/列标识符
  • 我不知道你想要什么。请添加示例数据和所需的输出。
  • 我写了 getGroup() 来返回一个特定的组 id。我只需要特定组的每个成员
  • 没有关联教师和教师信息的外键,也没有关联学生和学生信息的外键。

标签: mysql sql select view


【解决方案1】:

如果您将字段teacher_id 添加到teacher_information 表并将student_id 添加到student_information 字段

SELECT
    *
FROM    
    (SELECT 
        t.name as `name`,
        ti.email as `email`,
        g.name as `group_name`,
        g.id_group as `id_group`
    FROM 
        teacher t, 
        teacher_information ti, 
        group g
    WHERE
        t.id = ti.teacher_id and
        g.id_group = t.id_group
    UNION
    SELECT
        s.name as `name`,
        si.email as `email`,
        g.name as `group_name`,
        g.id_group as `id_group`
    FROM 
        student s, 
        student_information si, 
        group g
    WHERE
        s.id = si.student_id and
        g.id_group = s.id_group
    ) as a
where
    a.id_group = ?
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多