【问题标题】:SQL select multiple variablesSQL选择多个变量
【发布时间】:2014-02-11 22:47:50
【问题描述】:

我有 3 个表,Subject、SubjectTeacher 和 Head。一个业务规则是每个 Subject 有一个 Head。

Subject
ID         Name            Code  
1          Mathematics     Math  
2          Biology         Bio  
3          Zoology         Zoo  

SubjectTeacher
TeacherID         JoinDate           SubjectID
1                 2001-12-11         1
2                 2004-12-11         2
3                 2002-12-11         3

Head
TeacherID         StartDate          EndDate
1                 2001-12-11         2016-12-11
2                 2004-12-11         2014-12-11
3                 2002-12-11         2017-12-11

我有 2 个变量,MathHead 和 BioHead
我想编写一个填充这 2 个变量的查询
我确定了两种方法。一种是临时表。对于一个看似简单的问题来说太重了。
其他是多个查询,每个变量一个。这很简单/容易,但随着变量的增加,查询也会增加。
有没有更好的方法?
更新: 我正在做这样的事情。上面还加了一个链接表(SubjectTeacher)

SELECT @BioHead = TeacherID
FROM Head head
JOIN SubjectTeacher st on st.TeacherID = head.TeacherID
JOIN Subject subject on st.SubjectID = subject.ID
WHERE subject.Name = 'Biology'

【问题讨论】:

  • 你提到你有变量,我假设它们是 T-SQL 变量。为方便起见,请显示您已有的查询和/或相关代码以获取您想要的信息。
  • 没有标记。我想在连接表上应用过滤器来说明哪些变量应该包含哪些数据。

标签: sql-server


【解决方案1】:

在数据库中应用此业务规则的一种简单方法是仅在主题上设置一个具有外键限制教师的列,除非那是 HeadTeacherId 而不是表名。真的不能用这样的格式来判断。

【讨论】:

    【解决方案2】:

    也许您应该联合查询并输出这样的结果集,有点像“键值”方法:

    TYPE| VALUE
    head | 'The head of the dep'
    teacher | 'the teacher's name'
    subject| 'Biology'
    

    如果这没有意义,请提供您想要的输出。

    【讨论】:

    • 我想让 TeacherID 进入变量
    • 您是否始终知道您将返回多少个 TeacherID?如果你不能确定,似乎你应该返回一个结果集。
    • 我知道每个主题只有一个人头。
    • 所以您可以返回 N 个teacherID?如果是这样,我认为你需要放弃变量,只返回一个带有选择的结果集/数据集。
    • 不,我知道每个主题只有一个人头,而且我知道主题数。所以我确信结果计数。因此变量应该没问题。顺便说一句,解决方案并不大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2014-12-25
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多