2017-04-07 66 views
0

编辑**********MySQL触发代码基于另一个值输入语句

我无法获得下面的代码,因此我试图在图表工具中运行它工作台。这是我的代码

CREATE DEFINER = CURRENT_USER TRIGGER `MeasureUp_Data`.`bmd_results_BEFORE_INSERT` BEFORE INSERT ON `bmd_l_arm` FOR EACH ROW 
BEGIN 
INSERT INTO bmd_results VALUES (new.bmd_l_arm_typ 
CASE new.l_arm_tscore 
    WHEN < -2.5 THEN 'osteoporosis' 
    WHEN > -2.4 < -1.0 THEN 'osteopenia' 
    WHEN > -1.0 THEN 'normal' 
    ELSE NULL 
    END); 
END 

我得到红色尽管代码通过所有。基本上值将被自动输入到data.bmd_l_arm,我想在data.bmd_results现场标记bmd_l_arm_typ有基于数值结果的文本输入推入l_arm_tscore

感谢您持续的帮助!

我对编码游戏非常陌生,并且在MySQL上创建了一个Db,为我的公司增加了一些价值。我创建了数据库模式,并希望在我的表中的某个字段中插入基于进入另一个表中的条目的值。基本上这是针对医疗报告数据库的,我希望诊断结果能够以字段形式显示在文本中。

这是我希望出现的值的表,更具体地说,我希望列(例如)bmd_sp_typ根据不同表格中的数字结果插入VARCHAR(我将指定结果)。

CREATE TABLE IF NOT EXISTS `MeasureUp_Data`.`bmd_results` (
    `access_no` INT NOT NULL, 
    `bmd_sp_typ` VARCHAR(45) NULL, 
    PRIMARY KEY (`access_no`), 
    INDEX `pat_id_FK_idx` (`pat_id` ASC), 
    INDEX `fk_site_bmd_site_idx` (`site_id` ASC), 
    UNIQUE INDEX `pat_id_UNIQUE` (`pat_id` ASC), 
    UNIQUE INDEX `site_id_UNIQUE` (`site_id` ASC), 
    UNIQUE INDEX `access_no_UNIQUE` (`access_no` ASC), 
    CONSTRAINT `fk_demo_results_id` 
    FOREIGN KEY (`pat_id`) 
    REFERENCES `MeasureUp_Data`.`patient_demo` (`pat_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_site_bmd_site` 
    FOREIGN KEY (`site_id`) 
    REFERENCES `MeasureUp_Data`.`site_cont` (`site_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

可以找到数值结果的表格如下。基本上是spine_total_bmd的值是X然后Y将被插入到bmd_sp_type中,或者,如果spine_total_bmdA那么将插入B

CREATE TABLE IF NOT EXISTS `MeasureUp_Data`.`bmd_spine` (
    `access_no` INT NOT NULL, 
    `spine_total_bmd` INT NULL, 
    `spine_total_tscore` INT NULL, 
    `spine_total_zscore` INT NULL, 
    `spine_total_peakref` INT NULL, 
    `spine_total_agemat` INT NULL, 
    PRIMARY KEY (`access_no`), 
    CONSTRAINT `fk_bmd_spine_access` 
    FOREIGN KEY (`access_no`) 
    REFERENCES `MeasureUp_Data`.`bmd_results` (`access_no`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

任何帮助这种编码noob将不胜感激。

回答

0

你可以写一个INSERT触发器 -

CREATE TRIGGER trigger 
    BEFORE INSERT 
    ON bmd_spine 
    FOR EACH ROW 
BEGIN 
    INSERT INTO bmd_results VALUES (
    new.access_no, 
    CASE new.spine_total_bmd 
     WHEN 1 THEN 'y' 
     WHEN 2 THEN 'b' 
     ELSE NULL 
    END); 
END 

另外,还可以从上飞表和变化值只是选择数据,并没有存储重复值。这里是一个例子 -

SELECT 
    access_no, 
    CASE spine_total_bmd 
    WHEN 1 THEN 'y' 
    WHEN 2 THEN 'b' 
    ELSE NULL 
    END 
FROM 
    bmd_spine; 
+0

感谢您的快速响应。只是为了澄清我是否需要 当1那么'y'在两个值之间时,我可以使用BETWEEN运算符还是当我将它放下时为-2.5那么'Y'为<-2.5 > -1.5那么'b'等。 – Carl

+0

看看这个主题 - https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case。我这会为这个问题提供一些启示。 – Devart