如何在一列mysql中放置多个关系id?

时间:2016-05-11 12:54:49

标签: php mysql sql

假设我有两个表,首先是:

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

另一个是:

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

我想在课程栏目中列出老师给出的课程内容 在join语句中使用它们。 做这样的事情的最佳方法是什么。 我希望我很清楚,谢谢你。

3 个答案:

答案 0 :(得分:5)

您设计数据库的方式会破坏First Normal Form,它表示数据库的每个属性都应该是原子的。 通常,Courses列不是原子的,因为它是一个列表。

您需要创建一个类似于GivenBy的新表,它看起来像

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

在此表中,主键由2列(course_id和teacher_id)组成。每行存储教师和课程之间的一种关系。 最后,您应该使用外键引用CourseTeacher

的ID

答案 1 :(得分:0)

您可能只想添加第三个表来处理教师课程的关系。

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

然后你可以在这个表上使用你的join语句。不要试图在一列中放入多于一个值(尤其是没有键)。

答案 2 :(得分:0)

这是存储逗号分隔值的可怕方式,但如果你没有能力改变它,你可以尝试类似的东西。

QUERY

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*