用于将三个表与char列标准

时间:2017-06-25 05:23:19

标签: sql

我必须修复一个设计很差的数据库。

问题:

一个招聘广告有一个职位,但许多符合条件的学位。

(例如,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 将有三列:

  • uniqueJobUid
  • jobId
  • degreeId

问题是Job表已经很大了,500,000行(而且Job_Degree表更大)

问题: 什么是创建UniqueJob_UniqueDegree_Job表的最有效的SQL语句,因为该语句的一部分将比较UniqueDegree.degreeName和Job_Degree.degreeName的char列?

任何提示都将非常受欢迎。

1 个答案:

答案 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行也相当小。这不应该超过我估计的几秒钟。