假设我有两个表,首先是:
Course table
----------------
|id | name |
|0 | pr course|
|1 | science |
----------------
另一个是:
Teacher table
----------------------
|id | name | Courses |
|0 | mark | 0 ,1 |
|1 | john | 0 |
----------------------
我想在课程栏目中列出老师给出的课程内容 在join语句中使用它们。 做这样的事情的最佳方法是什么。 我希望我很清楚,谢谢你。
答案 0 :(得分:5)
您设计数据库的方式会破坏First Normal Form,它表示数据库的每个属性都应该是原子的。
通常,Courses
列不是原子的,因为它是一个列表。
您需要创建一个类似于GivenBy
的新表,它看起来像
GivenBy table
------------------------
|course_id | teacher_id|
------------------------
在此表中,主键由2列(course_id和teacher_id)组成。每行存储教师和课程之间的一种关系。
最后,您应该使用外键引用Course
和Teacher
答案 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*