在HeidiSQL中创建一个非常具体的列

时间:2015-04-24 12:27:07

标签: sql heidisql

我一直在尝试用HeidiSQL建立一个小型数据库,但我偶然发现了一个问题。我想在某个表中添加一列,该列计算包含特定值的另一个表中的列数。我通过设置默认值尝试了它,输入一个看起来像这样的自定义值

    SELECT COUNT(LidID) AS AantalSchepen FROM SCHIP WHERE SCHIP.LidID=LID.LidID

而LidID是我想要计算行数的列的名称,在表SCHIP中包含与表LID中相同的值。 LidID的值是表LID的主键,因此逻辑上是表SCHIP中的外键。

但是,当我在自定义默认值字段中输入此语句时,它会告诉我默认值无效。我正在做什么完全不可能,或者我的SQL语句是否有缺陷?

编辑: 数据库的目的是成为网站表格中显示的信息来源。正如我在之前的回复中所读到的,我在这里尝试做的事情根本不可能,所以不同的解决方案是......?

2 个答案:

答案 0 :(得分:0)

通常,您无法添加“运行查询”的默认值。这可能取决于数据库,但我想不出支持这个的数据库。

您可以使用视图访问数据:

create view v_lid as
    select l.*,
           (select count(*)
            from SCHIP s
            where s.LidID = l.LidID
           ) as AantalSchepen
    from lid l;

然后,当您访问该视图时,您将获得最新值。

注意:这与“默认”值略有不同,“默认”值会在创建行时放入值。如果你真的想要那个,你需要一个触发器。或者,也许有一些日期逻辑会达到相同的值。

答案 1 :(得分:0)

在MySQL 5.7.6和MariaDB 5.2中,表格可以包含虚拟列。 MariaDB称之为虚拟,在MySQL中称为生成。两者的意思相同,语法也非常相似。 HeidiSQL的表编辑器支持创建这样的虚拟列。示例CREATE CODE:

CREATE TABLE table1 (
 a INT NOT NULL,
 b VARCHAR(32),
 c INT AS (a mod 10) VIRTUAL
)

不幸的是,虚拟列不支持子查询,这就是为什么这一切对COUNT(*)查询没有帮助。