MySQL:使用包含两个表数据的新行扩展表

时间:2018-04-07 15:55:52

标签: mysql sql

我的表足以在项目开始时得到我需要的东西,但现在我需要扩展它。

s_ogr

id | ad | numara | yurt_id | egitim_id | yetkili_id | yetkili_ad

当前表s_kontrol

id | ogr_id | tur_id | durum_id | tarih | egitim_id | yurt_id

需要什么s_kontrol_k

id | ogr_id | ogr_numara |ogr_ad | tur_id | durum_id | tarih | egitim_id | yurt_id

行说明 ad = nameogr_idstudent_idyurt_iddepartment_id

我的投射; s_kontrol已经包含超过24000的数据。我需要它来展开s_kontrol_k,但是应该从s_ogr表中通过s_ogr和{的匹配操作获取新的两个字段{1}}(s_ogr.id = s_kontrol.ogr_id和s_ogr.yurt_id = s_kontrol.yurt_id)。我发现我的错误不是将s_kontrol作为ogr_id的学生添加到id

我需要什么;一个有用的查询,它复制来自源的数据,但如何使用正确的值填充第三个表中的新字段

s_kontrol

我遇到问题的查询就是为什么我需要一个简单的表

INSERT INTO s_kontrol_k ( id ,  ogr_id ,  tur_id ,  durum_id ,  tarih ,  egitim_id ,  yurt_id )

SELECT  id ,  ogr_id ,  tur_id ,  durum_id ,  tarih ,  egitim_id ,  yurt_id  FROM s_kontrol 

第二个

SELECT s_kontrol.ogr_id,
s_ogr.ad, 
s_kontrol.tur_id, 
s_kontrol.durum_id,
SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end) var,
SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end) gorevli,
SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end) yok,
SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end) izinli,
SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) hatimde 
FROM s_kontrol, s_ogr 
WHERE s_kontrol.ogr_id=s_ogr.numara 
AND s_kontrol.yurt_id=s_ogr.yurt_id 
and s_ogr.yurt_id=? 
and tarih BETWEEN ? and ? 
and tur_id IN (?) 
GROUP BY s_kontrol.ogr_id

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容。

INSERT INTO s_kontrol_k 
( id ,  ogr_id , ogr_ad , tur_id ,  durum_id ,  tarih ,  egitim_id ,  yurt_id )

SELECT  o.id ,  o.ogr_id ,  o.ogr_ad , 
s.tur_id ,  s.durum_id ,  s.tarih ,  s.egitim_id ,  s.yurt_id  
FROM 
s_kontrol s inner join s_ogr o on o.yurt_id =s.yurt_id;


INSERT INTO s_kontrol_k (
id, ogr_id, ogr_numara, ogr_ad, tur_id, 
durum_id, tarih, egitim_id, yurt_id) 
SELECT 
s_kontrol.id, 
s_ogr.id, 
s_kontrol.ogr_id, 
s_ogr.ad, 
s_kontrol.tur_id, 
s_kontrol.durum_id, 
s_kontrol.tarih, 
s_kontrol.egitim_id, 
s_kontrol.yurt_id FROM 
s_kontrol inner join  
s_ogr WHERE 
s_ogr.yurt_id = s_kontrol.yurt_id 
and s_ogr.numara = s_kontrol.ogr_id

答案 1 :(得分:0)

首先复制相同的列

INSERT INTO s_kontrol_k (
id, ogr_numara, tur_id, durum_id, tarih, 
egitim_id, yurt_id)
SELECT 
id, 
ogr_id, 
tur_id, 
durum_id, 
tarih, 
egitim_id, 
yurt_id 
FROM 
s_kontrol

然后更新了值

UPDATE 
s_kontrol_k 
INNER JOIN s_ogr ON s_kontrol_k.ogr_numara = s_ogr.numara 
and s_kontrol_k.yurt_id = s_ogr.yurt_id SET s_kontrol_k.ogr_id = s_ogr.id

UPDATE 
s_kontrol_k 
INNER JOIN s_ogr ON s_kontrol_k.ogr_numara = s_ogr.numara 
and s_kontrol_k.yurt_id = s_ogr.yurt_id SET 
s_kontrol_k.ogr_ad = s_ogr.ad

可以通过添加新行在主表上更新