sql - 为了创建我的模型,我需要执行一个非常困难的查询

标签 sql sql-server

所以在我的项目中,我需要访问一个名为“日期”的表。表“日期”包含以下内容:

ClassID | TeacherID | StudentID | DateInfo | Status | DateID

对于除 DateID 之外的任何 ID,我需要创建一个连接到日期模型的模型。 另一个重要的信息是我有一个名为“用户”的表和 2 个派生自“用户”、“学生”和“教师”的表。

My Problem: because I need both the student and the teacher in the same record, I need to request from the DB the user's information about both of them in the same query. I can not do that because of i don't know how can I define the student's information different from the teacher information.

用户表:

UserID | Name | LastName | Password | Status | Role 

教师表:

TeacherID | ClassID

学生表:

StudentID | YearAndClass

我正在尝试创建的查询:

SELECT
IF(Users.Role == 0(Student Role))
  Users.Name as sName, ....
ELSE IF(Users.Role == 1(Teacher Role))
  Users.Name as tName, ....  
FROM Dates, Users, Students, Teachers

我知道这行不通,但我不确定我还能如何描述它。

提前致谢!

最佳答案

根据我对你的问题的评论,我仍然认为你应该回去稍微修改你的结构,你似乎大部分都在那里,但最好在使用它之前让任何过程的基础正确。

就是说,据我了解,您希望获得 1 个列表中的用户名,但可以按其角色区分。以下应该有效。

我添加了 UserIDs 和 Role 字段,以便您可以根据您的数据检查它们,看看它是否按预期工作。

    SELECT
     CASE   WHEN d.Role = 'Teacher Role' THEN ut.UserID
            WHEN d.Role = 'Student Role' THEN us.UserID
            ELSE ''
        END AS UserID
    ,CASE   WHEN d.Role = 'Teacher Role' THEN ut.Name
            WHEN d.Role = 'Student Role' THEN us.Name
            ELSE ''
        END AS UserName
    ,d.Role
    FROM Dates d
    LEFT JOIN Users ut ON d.TeacherID = ut.UserID
    INNER JOIN Teachers t ON ut.UserID = t.TeacherID
    LEFT JOIN Users us ON d.StudentID = us.UserID
    INNER JOIN Students s ON us.UserID = s.StudentID

或者可能是下面的(未经测试);

    SELECT
     CASE   WHEN d.Role = 'Teacher Role' THEN ut.UserID
            WHEN d.Role = 'Student Role' THEN us.UserID
            ELSE ''
        END AS UserID
    ,CASE   WHEN d.Role = 'Teacher Role' THEN ut.Name
            WHEN d.Role = 'Student Role' THEN us.Name
            ELSE ''
        END AS UserName
    ,d.Role
    FROM Dates d
    LEFT JOIN Users ut ON d.TeacherID = ut.UserID AND ut.UserID IN (SELECT DISTINCT TeacherID FROM Teachers)
    LEFT JOIN Users us ON d.StudentID = us.UserID AND us.UserID IN (SELECT DISTINCT StudentID FROM Students)

关于sql - 为了创建我的模型,我需要执行一个非常困难的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458253/

相关文章:

sql - 如何在 SQL Server 上计算以 2 列作为参数的表中的值的数量?

sql - SQL Server 通配符范围(例如 [A-D])如何与区分大小写的排序规则一起使用?

sql - 电子邮件消息系统的数据库设计

sql-server - 使用 FOR XML AUTO、元素进行左连接

SQL Server 2008存储过程结果作为列默认值

sql - 如何在一个 PostgreSQL 查询中使用多个 WITH 语句?

php - 如何在 PHP 中连接用户定义的变量并将结果插入 MySQL 表

sql - Firebird SQL 连接表

mysql - SQL 查询给出错误的输出

sql - 在 SQL Server 中使用全文搜索的延迟