【问题标题】:Insert in table using Joins and Where使用 Joins 和 Where 插入表格
【发布时间】:2016-03-03 11:06:38
【问题描述】:

我有 2 张桌子。 expermiment_list 包含实验列表,expermiment_MCQ 包含该实验的几个问题。

例如:存储在expermiment_list中的ChemistryLab01可能有很多问题存储在expermiment_MCQ

我可以使用这个 SQL 创建新的实验:

INSERT INTO `expermiment_list` (`exp_name`,`exp_duedate`) VALUES
 ('ChemistryLab01','2015/12/12'),
 ('ChemistryLab02','2016/11/11');

在上述情况下,ChemistryLab01 得到 exp_id = 1,ChemistryLab02 得到 exp_id = 2。显示如何向 expermiment_MCQ 添加/插入问题,其中 exp_id = 1。这是我的伪SQL

INSERT INTO `expermiment_MCQ` (`exp_question`,`exp_option1`,`exp_option2`,`exp_option3`,
    `exp_option4`,`correct_answer`) VALUES ('Whats your instructor's name?','Adam','Ben','Chris','David',
'Chris') where expermiment_list.exp_id = expermiment_MCQ.exp_id and expermiment_MCQ.exp_id = 1;

两个表结构:

CREATE TABLE IF NOT EXISTS `expermiment_list` (
  `exp_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `exp_name` varchar(500) NOT NULL,
  `exp_duedate` varchar(20) NOT NULL,
  PRIMARY KEY (`exp_id`)
);


CREATE TABLE IF NOT EXISTS `expermiment_MCQ` (
  `exp_id` int(10) unsigned,
  `question_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `exp_question` varchar(5000) NOT NULL,
  `exp_option1` varchar(200) NOT NULL,
  `exp_option2` varchar(200) NOT NULL,
  `exp_option3` varchar(200) NOT NULL,
  `exp_option4` varchar(200) NOT NULL,
  `correct_answer` varchar(200) NOT NULL,
  PRIMARY KEY (`question_id`)
);

【问题讨论】:

  • 查看外键、事务和 LAST_INSERT_ID
  • 实验?真的吗?

标签: mysql sql database join insert


【解决方案1】:

您的 psuedo-sql 大部分是正确的,尽管 where 语句不合适。只需像其他列一样将 id 直接插入表中:

INSERT INTO expermiment_MCQ(
    exp_id,
    exp_question ,
    exp_option1 , 
    exp_option2 , 
    exp_option3 ,
    exp_option4 , 
    correct_answer) 
VALUES (
    1,
    'Whats your instructor''s name?' ,
    'Adam', 
    'Ben', 
    'Chris',
    'David',
    'Chris') 

不过,作为一般提示,我建议将您的答案拆分到另一个表格中。当您最终使用 option1、option2 等时,您需要更改架构以处理 option5 +。

我会按照以下方式去做:

exp_id | option_num | option | is_correct 
1      | 1          | Adam   | N
1      | 2          | Chris  | Y
1      | 3          | David  | N

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多