copy_questions_tem_to_questions.sql 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. -- =============================================================================
  2. -- questions 与 questions_tem 除 id 外结构一致时:从 tem 插入 questions
  3. --
  4. -- 说明:
  5. -- · id 不拷贝,由 questions 自增。
  6. -- · question_code 在 questions 上唯一:下面用新码避免与已有行冲突。
  7. -- 若你确认 tem 的 question_code 与 questions 绝不重复,可把 SELECT 里第一列改成 t.question_code。
  8. -- · 其余列与 tem 一一对应(结构完全一致时可直接照抄)。
  9. -- · 去重:与业务一致,同 kp_code + stem 已在 questions 存在则跳过。
  10. --
  11. -- 执行前备份;建议先 START TRANSACTION,核对行数后再 COMMIT。
  12. -- 需要 MySQL 8+(UUID())。
  13. -- =============================================================================
  14. START TRANSACTION;
  15. INSERT INTO `questions` (
  16. `question_code`,
  17. `kp_id`,
  18. `textbook_catalog_nodes_id`,
  19. `stem`,
  20. `options`,
  21. `answer`,
  22. `solution`,
  23. `difficulty`,
  24. `question_category`,
  25. `source`,
  26. `tags`,
  27. `question_type`,
  28. `source_file_id`,
  29. `source_paper_id`,
  30. `paper_part_id`,
  31. `textbook_id`,
  32. `meta`,
  33. `created_at`,
  34. `updated_at`,
  35. `audit_status`,
  36. `audit_reason`,
  37. `title_1`,
  38. `title_2`,
  39. `title_3`,
  40. `create_by`,
  41. `kp_code`,
  42. `kp_name`,
  43. `kp_reference`,
  44. `grade`,
  45. `step_num`,
  46. `solution_temp`,
  47. `solution_temp2`
  48. )
  49. SELECT
  50. CONCAT('QT', UPPER(SUBSTRING(REPLACE(UUID(), '-', ''), 1, 12))) AS `question_code`,
  51. t.`kp_id`,
  52. t.`textbook_catalog_nodes_id`,
  53. t.`stem`,
  54. t.`options`,
  55. t.`answer`,
  56. t.`solution`,
  57. t.`difficulty`,
  58. t.`question_category`,
  59. t.`source`,
  60. t.`tags`,
  61. t.`question_type`,
  62. t.`source_file_id`,
  63. t.`source_paper_id`,
  64. t.`paper_part_id`,
  65. t.`textbook_id`,
  66. t.`meta`,
  67. t.`created_at`,
  68. t.`updated_at`,
  69. t.`audit_status`,
  70. t.`audit_reason`,
  71. t.`title_1`,
  72. t.`title_2`,
  73. t.`title_3`,
  74. t.`create_by`,
  75. t.`kp_code`,
  76. t.`kp_name`,
  77. t.`kp_reference`,
  78. t.`grade`,
  79. t.`step_num`,
  80. t.`solution_temp`,
  81. t.`solution_temp2`
  82. FROM `questions_tem` AS t
  83. WHERE
  84. t.`kp_code` IS NOT NULL
  85. AND TRIM(t.`kp_code`) <> ''
  86. AND t.`stem` IS NOT NULL
  87. AND TRIM(t.`stem`) <> ''
  88. AND NOT EXISTS (
  89. SELECT 1
  90. FROM `questions` AS q
  91. WHERE q.`kp_code` = t.`kp_code`
  92. AND q.`stem` = t.`stem`
  93. );
  94. COMMIT;
  95. -- -----------------------------------------------------------------------------
  96. -- 若两表列名/顺序有出入,可先查出 questions 除 id 外的列名再改 INSERT/SELECT:
  97. -- SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  98. -- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'questions' AND COLUMN_NAME <> 'id'
  99. -- ORDER BY ORDINAL_POSITION;
  100. -- -----------------------------------------------------------------------------
  101. -- 仅复制部分 tem 行:在 WHERE 末尾增加 AND t.id IN (1,2,3);