2017-03-12 62 views
-1

我在使用sql數據庫的.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 

對於每一個學生,我需要他的書被老師的書(書本身的名稱),比較(查看是否有匹配)。 另外,有沒有更高效的做我的數據庫?

有什麼建議嗎?

+0

修復您的數據模型。顯然,你應該有名爲'StudentBooks'和'TeacherBooks'的表。 –

+0

您能否詳細說明一下? – FNM

回答

0

有幾種方法可以做你的項目。如果容易與否取決於你的需要,限制,你的容量等

據我所知,你應該有4個表,爲更好的數據庫設計。你將會擁有; (其實,你應該有更多的表爲更好的設計見What is Normalisation (or Normalization)?

  • 表1:學生(ID,姓名)
  • 表2:教師(ID,姓名)
  • 表3:StudentBooks( StudentId,NameOfTheBook)
  • 表4:TeacherBooks(TeacherId,NameOfTheBook)

則可以執行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語句。

0

較早的答案涵蓋了進一步規範化數據庫結構的優點,但我建議還要添加Books(Id,Name),並讓StudentBooks和TeachersBooks表與Books表的Id相關。通過這種方式,您可以對重命名圖書進行說明(即修復拼寫錯誤)。從長遠來看,這應該會產生更一致的數據。