我必须修复一个设计很差的数据库。
问题:
一个招聘广告有一个职位,但许多符合条件的学位。
(例如,JobTitle:分析师,资格:会计学位,或金融学位或商业学位)
表:
TableName: UniqueJobName 列: jobName (char) uniqueJobUid (bigint)
TableName: UniqueDegree 列: degreeName (char) degreeUid (bigint)
TableName:作业列: jobName (char) jobUid (bigint), uniqueJobUid (bigint)< / p>
TableName: Job_Degree : jobUid (char) degreeName (char)
关系
onetomany UniqueJobName.uniqueJobUid - &gt; Jobs.uniqueJobUid
onetomany Jobs.jobUid-&gt; Job_Degree.jobUid
Jobs和UniqueDegree之间没有任何关系。
技术要求
我不想在job_Degree中为degreeUid创建一个列,而是想创建一个新表: UniqueJob_UniqueDegree_Job (有理由我在这里不会解释)
UniqueJob_UniqueDegree_Job 将有三列:
问题是Job表已经很大了,500,000行(而且Job_Degree表更大)
问题: 什么是创建UniqueJob_UniqueDegree_Job表的最有效的SQL语句,因为该语句的一部分将比较UniqueDegree.degreeName和Job_Degree.degreeName的char列?
任何提示都将非常受欢迎。
答案 0 :(得分:1)
select j.jobname, j.jobuid, ud.degreeid
into UniqueJob_UniqueDegree_Job
from jobs j
join job_degree jd on j.jobuid = jd.jobuid
join uniquedegree ud on ud.jobname = jd.jobname
因为我使用的是一部毫无价值的手机,所以很难获得大写字母等。
但是应该这样做。注意为了执行select Into ...从表中无法创建(您可以在select语句中的每个属性上使用convert或cast来确保数据类型正确。
如果该表已存在,则将查询更改为
insert Into ..
select ...
from ....
500k行也相当小。这不应该超过我估计的几秒钟。