Sql:一次比较多个值

时间:2017-03-12 16:39:05

标签: sql .net

我在.net(visual studio)上做了一个项目,我正在使用sql数据库。我想知道如何在同一时间比较多个值。有一个简单的&简单的方法吗?

两个表之间的比较。例如:

Table 1 (student) has:
Name
Id
Book1 (art for example)
Book2 (math)
Book3 (math 2)
Book4 (history)
Book5 (physics)

Table 2 (teacher) has:
Name
Id
Book1
Book2
Book3
Book4
Book5

对于每个学生,我需要用老师的书比较他的书(书本身的名字)(看看是否有匹配)。 另外,我的数据库是否更有效率?

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

有几种方法可以完成您的项目。如果容易与否取决于您的需要,约束,您的能力等。

据我了解,您应该有4个表来进行更好的数据库设计。你将会有; (事实上​​,你应该有更多的表来提供更好的设计,请参阅What is Normalisation (or Normalization)?

  • 表1:学生(身份证,姓名)
  • 表2:教师(身份证,姓名)
  • 表3:学生书(StudentId,NameOfTheBook)
  • 表4:TeacherBooks(TeacherId,NameOfTheBook)

然后你可以像<; p>那样执行SQL语句

-- Fetch name of the books for a specific student
SELECT b.NameOfTheBook 
FROM Students AS s INNER JOIN StudentBooks AS b ON s.Id = b.StudentId
WHERE s.Id = <id of the student>

-- Fetch name of the books for a specific teacher
SELECT b.NameOfTheBook 
FROM Teachers AS t INNER JOIN TeacherBooks AS b ON t.Id = b.TeacherId
WHERE t.Id = <id of the student>

这只是一个示例,因此您可以增强模型并执行更复杂的SQL语句。

答案 1 :(得分:0)

前面的答案涵盖了进一步规范化数据库结构的优点,但我建议还添加一本书籍(Id,Name),并让StudentBooks和TeachersBooks表格与Books表格的ID相关联。通过这种方式,您可以考虑重命名书籍(即修复拼写错误)。从长远来看,这应该会产生更加一致的数据。