首页 > 解决方案 > MySQL:将值从案例表达式插入表中

问题描述

下面我运行了一个程序,将一些值插入到我的shipin 表中。通常我的 Reference 2 字段是静态的,但我需要它是可变的。但是,我从中提取的字段 'shipinimport'.'accountID' 需要返回与已经存在的结果不同的结果。如您所见,这就是 case 表达式出现的地方。

我的问题是,这实际上并没有将返回的结果插入到我的shipin 表中。我可以查询它并获得我正在寻找的结果,但我需要它将它与我的过程中的其余值一起插入到表中。我尝试在我的程序中移动表达式,认为这可能是事件顺序问题,但这不起作用。那么有没有办法做到这一点?任何帮助或指导将不胜感激。

CREATE DEFINER=`root`@`%` PROCEDURE `SubjectDetailsExportToShipIn_hs`()
BEGIN

INSERT INTO ShipInImport
SELECT *
FROM dpi_timestone.SubjectDetailsView_hs;

INSERT INTO `timestone`.`shipin`
     (`REFERENCE_1`,
     `REFERENCE_2`,
     `date_loaded`,
     `location`)

SELECT
     `shipinimport`.`SubjectKey`, --Reference 1
     `shipinimport`.`AccountID`, --Reference 2
      Now(), --DateLoaded
     'DPI'--location
FROM `dpi_timestone`.`shipinimport`;

Select Case AccountID
      When 16 Then 191
      When 1 Then 125
    End
FROM `dpi_timestone`.`shipinimport`;
End

标签: mysql

解决方案


如果您只是想将这些 AccountID 值替换为“参考 2”;将 CASE 放在您的第一个选择中,如下所示:

SELECT
     `shipinimport`.`SubjectKey`, --Reference 1
      CASE `shipinimport`.`AccountID`
        WHEN 16 THEN 191
        WHEN 1 THEN 125
        ELSE `shipinimport`.`AccountID`
      END, --Reference 2
      Now(), --DateLoaded
     'DPI'--location
FROM `dpi_timestone`.`shipinimport`;

如果不是这种情况,您的代码不会使您期望 191 和 125 结束的地方变得明显。


推荐阅读