MySQL: расширение таблицы новыми строками, включая две таблицы данных

0

Мой стол был достаточно, чтобы получить то, что мне нужно в начале проекта, но теперь мне нужно его расширить.

Таблица 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 = name, ogr_id is student_id, yurt_id is department_id

Мое значение; s_kontrol полна данных более 24000. Мне нужно, чтобы он расширил s_kontrol_k, но новые два поля должны быть взяты из таблицы s_ogr, путем операции s_ogr и s_kontrol (s_ogr.id = s_kontrol.ogr_id и s_ogr.yurt_id = s_kontrol.yurt_id). Я вижу, что моя ошибка заключается не в том, чтобы добавить 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

Второй

select deneme.ogr_id,
deneme.ad,
sum(case deneme.tur_id WHEN 1 THEN YUZDE else 0 END) sabah ,
sum(case deneme.tur_id WHEN 2 THEN YUZDE else 0 END) ogle,
sum(case deneme.tur_id WHEN 4 THEN YUZDE else 0 END) aksam,
sum(case deneme.tur_id WHEN 5 THEN YUZDE else 0 END) yatsi,
sum(case deneme.tur_id WHEN 6 THEN YUZDE else 0 END) sohbet,
sum(case deneme.tur_id WHEN 7 THEN YUZDE else 0 END) muhtelif 
FROM (
      SELECT s_kontrol.ogr_id, 
      s_ogr.ad,tur_id, 
      CEILING(((SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) )
      -(SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)))
      /(SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end)
      +SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) ) 
      * 100) YUZDE 
      FROM s_kontrol, s_ogr 
      WHERE s_kontrol.ogr_id=s_ogr.numara 
      and s_ogr.yurt_id=? 
      and tarih BETWEEN ? and ? 
      and tur_id IN(1,2,3,4,5,6,7) 
      GROUP BY s_kontrol.ogr_id,s_ogr.ad, tur_id 
     ) deneme 
group by ogr_id,ad order by 1
  • 0
    В запросе выбора вы можете использовать соединение таблицы s_ogr
  • 0
    Пожалуйста, приведите примеры источников данных и ожидаемый конечный результат.
Показать ещё 6 комментариев
Теги:

2 ответа

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
  • 0
    проблема в том, что o.id и s.ogr_id - это не одно и то же, только o.yurt_id и s.yurt_id - это одно и то же
  • 0
    Хорошо, тогда используйте эти два в состоянии соединения
Показать ещё 3 комментария
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

Может быть обновлено на главной таблице, добавив новые строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню