使用联接和

时间:2015-11-29 20:52:58

标签: mysql sql database join insert

我有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. 这里是我的psedue-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`)
);

1 个答案:

答案 0 :(得分:0)

你的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