首页 > 解决方案 > 将 PK 合并到表中的 A 列

问题描述

我正在尝试创建一个包含四列的表:ID, animalid, calvdate, AnimalidLactNo; AnimalidLactNo是 PK( ID) 和之间的连接animalid

我尝试了以下查询:

CREATE TABLE calvingdatecombined
(
    animalid varchar(80) ,
    calvDate varchar(15) NOT NUll,
    AnimalidLactNo AS CAST(ID AS VARCHAR) + animalid
);

我的预期输出

# ID, animalid, calvDate, AnimalidLactNo

运行插入语句后我的示例数据输出应该是:

1, TZNDJ02, 2016-06-18, 1-TZNDJ02

标签: mysql

解决方案


如果您将 MySQL 5.7 与 NDB Cluster 7.5.3 一起使用,那么您应该支持生成的列

CREATE TABLE calvingdatecombined (
    ID INT NOT NULL AUTO_INCREMENT,
    animalid VARCHAR(80),
    calvDate VARCHAR(15) NOT NULL,
    AnimalidLactNo VARCHAR(100) AS CONCAT(CAST(ID AS CHAR(20)), '-', animalid),
    PRIMARY KEY(ID)
);

您可以设置此列VIRTUAL,这意味着它会在您选择时即时计算,或者STORED,在这种情况下,每当您插入或更新时,该值就会被存储。

请注意,即使您不想/不能使用生成的列,您仍然可以只选择连接表达式,例如

SELECT
    ID,
    animalid,
    calvDate,
    CONCAT(CAST(ID AS CHAR(20)), '-', animalid) AS AnimalidLactNo
FROM calvingdatecombined;

推荐阅读