簡體   English   中英

如何在一個MySQL列中放置多個關系ID?

[英]How to put more than one relational id in one column mysql?

假設我首先有兩個表是:

   Course table  
   ----------------
   |id | name     |
   |0  | pr course|
   |1  | science  |
   ----------------

另一個是:

Teacher table 
----------------------
|id | name | Courses |
|0  | mark | 0 ,1    |
|1 | john | 0        |
----------------------

我想在課程列中輸入老師給出的課程ID,以便在join語句中使用它們。 做這樣的事的最好方法是什么。 我希望我足夠清楚,謝謝。

設計數據庫的方式違反了“ 第一范式” ,即表示數據庫的每個屬性都應該是原子的。 通常,“ Courses列不是原子的,因為它是一個列表。

您需要創建一個新的表,如GivenBy

   GivenBy table  
   ------------------------
   |course_id | teacher_id|
   ------------------------

在此表中,主鍵由2列(course_id和Teacher_id)組成。 每行存儲一個教師和一門課程之間的一種關系。 最后,您應該具有引用CourseTeacher的ID的外鍵

您可能只想添加第三個表來處理教師與課程的關系。

TeachersCourses table
----------------------
|teacher_id|course_id|
----------------------

然后,您可以在此表上使用連接語句。 不要試圖在一個欄中輸入一個以上的值(尤其是沒有鍵)。

這是存儲逗號分隔值的糟糕方法,但是如果您沒有能力更改它,則可以嘗試類似方法。

查詢

select t.name as TeacherName, c.name as CourseName
from Teacher t
inner join Courses c
    on ',' + t.id + ',' like '%,' + cast(c.id as nvarchar(20)) + ',%'

樣本數據

create table Courses
(
    id nvarchar(60),
    name nvarchar(60)
)
insert into Courses values (0 ,'pr course'), (1 ,'science')     

create table Teacher
(
   id nvarchar(60),
   name nvarchar(60),
   courses nvarchar(60)
)
insert into Teacher values (0,'mark','0,1'), (1,'john','0'  )   

輸出值

TeacherName     CourseName
mark            pr course
john            science*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM