2013-03-08 5 views
1

У меня есть таблица mysql с 1,5 миллионами записей в темной таблице, которую я хочу вставить в основную таблицу с внутренним соединением.Проблема при попытке вставить одну таблицу в другую

Мой код работает, но он останавливается на 103 613 записей. ИТ не продолжает идти. Почему это остановится? почему он не доходит до конца?

Это мой текущий код

INSERT INTO phone_calls(next_attempt, created_on, modified_on, status, call_subject, 
account_number, call_code, last_attempt_on, total_attempts, account_id 

,team_id 
,campaign_id 
,call_code_id 
,result_code 
,result_code_id 
,time_zone_id 
,trigger_on 
,first_attempt_on 
,first_attempt_by 
,last_attempt_by 
,modified_by 
,client_id 
,last_call_id 
,call_notes 
,owner_id 
,industry_id 
) 


SELECT 
CASE WHEN next_attempt IS NULL OR next_attempt = '' THEN STR_TO_DATE(replace(t.next_attempt,'/',','),'%m,%d,%Y %T') END as next_attempt, 
CASE WHEN t.created_on IS NULL OR t.created_on = '' THEN '0000-00-00 00:00:00' ELSE STR_TO_DATE(replace(t.created_on,'/',','),'%m,%d,%Y %T') END as created_on, 
CASE WHEN t.modified_on IS NULL OR t.modified_on = '' THEN '0000-00-00 00:00:00' ELSE STR_TO_DATE(replace(t.modified_on,'/',','),'%m,%d,%Y %T') END AS modified_on, 
CONVERT(CASE WHEN t.status IS NULL OR t.status = '' THEN 0 ELSE t.status END, UNSIGNED INTEGER) AS status, 
LEFT(IFNULL(t.call_subject, ''), 100), 
t.account_number, 
CONVERT(CASE WHEN t.callcode IS NULL OR t.callcode = '' THEN 0 ELSE t.callcode END , UNSIGNED INTEGER) AS callcode, STR_TO_DATE(replace(t.last_attempt_on,'/',','),'%m,%d,%Y %T') as last_attempt_on, 
CONVERT(CASE WHEN t.New_Attempts IS NULL OR t.New_Attempts = '' THEN 0 ELSE t.New_Attempts END , UNSIGNED INTEGER) AS New_Attempts, 
a.account_id 
,0 
,0 
,0 
,0 
,0 
,0 
, '0000-00-00 00:00:00' 
, '0000-00-00 00:00:00' 
,1 
,1 
,1 
,1 
,0 
,'IMPORTED FROM CRM' 
,1 
,1 
FROM tmp_table_for_rdi_cms AS t 
INNER JOIN accounts AS a ON a.account_number = t.account_number LIMIT 9999999999; 
these 2 fields are indexed so it runs fast 
a.account_number 
t.account_number 

Теперь я знаю, что я не буду вставлять никакого значения для некоторых полей, имеет тип, если целое число без знака, но это нормально, как я буду обновлять это в более позднее время.

Как я могу выполнить этот запрос INSERT INTO без потери записи?

ответ

0

Проблема «не имеет значения по умолчанию» заключается в том, что исходная таблица имеет значения NULL для столбцов в новой таблице, которые определены S NOT NULL и, которые не определены со значением по умолчанию.

У вас есть три варианта, чтобы исправить это:

  1. Определить целевые столбцы нулевых значений (оставить вне NOT NULL)
  2. Определить целевые столбцы со значением по умолчанию, то есть NOT NULL DEFAULT 'some value'
  3. Обеспечения значение, если столбец является нулевым, т.е. SELECT ifnull(source_column, 'some value)

The усеченное значение неправильно Integer проблемы, и вы выбираете из значения полукокса и положить его в колонке Int, но некоторые vyes являются пустыми, так что вы должны обращаться с этим:

select if(source_column = '', 0, source_column) 

Данные Данные, усеченные для столбца, возникают из-за того, что значение источника больше/длиннее, чем может быть размещен целевой столбец. Чтобы исправить, укажите, что ваш целевой столбец будет больше (bigint вместо int) или дольше (например, текст или varchar (80) вместо varchar (20))

 Смежные вопросы

  • Нет связанных вопросов^_^