Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在HeidiSQL中创建一个非常特定的列_Sql_Heidisql - Fatal编程技术网

在HeidiSQL中创建一个非常特定的列

在HeidiSQL中创建一个非常特定的列,sql,heidisql,Sql,Heidisql,我一直试图用HeidiSQL建立一个小型数据库,但我偶然发现了一个问题。我想在某个表中添加一列,计算另一个表中包含某个值的列的数量。我尝试过设置一个默认值,输入一个自定义值,如下所示 SELECT COUNT(LidID) AS AantalSchepen FROM SCHIP WHERE SCHIP.LidID=LID.LidID 而LidID是我要计算行数的列的名称,它在表SCHIP中包含与表LID中相同的值。 LidID的值是表LID的主键,因此逻辑上是表SCHIP中的外键 但是

我一直试图用HeidiSQL建立一个小型数据库,但我偶然发现了一个问题。我想在某个表中添加一列,计算另一个表中包含某个值的列的数量。我尝试过设置一个默认值,输入一个自定义值,如下所示

    SELECT COUNT(LidID) AS AantalSchepen FROM SCHIP WHERE SCHIP.LidID=LID.LidID
而LidID是我要计算行数的列的名称,它在表SCHIP中包含与表LID中相同的值。 LidID的值是表LID的主键,因此逻辑上是表SCHIP中的外键

但是,当我在自定义默认值字段中输入此语句时,它告诉我默认值无效。我所做的是完全不可能的,还是我的SQL语句有缺陷

编辑:
数据库的目的是作为网站表格中显示的信息来源。正如我在之前的回答中所读到的,我在这里试图做的是完全不可能的,所以不同的解决方案是

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

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

create view v_lid as
    select l.*,
           (select count(*)
            from SCHIP s
            where s.LidID = l.LidID
           ) as AantalSchepen
    from lid l;
然后,当您访问该视图时,您将获得该视图的最新值


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

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

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

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

你的意思是不是要计算行数?如果你是指行数,那么我猜你缺少GROUP BY语句GROUP BY在为一个id计算行数时不需要。@jarlh是的,我想这就是我的意思,英语不是我的母语,因此我可能在我的帖子中弄乱了一些语法,将对其进行编辑。@Asped我只是列出包含与我选择的值相等的值的行数,而不是列出所有不同的值及其对应的实例数。嗯,好的,让我详细说明主线程中该行的用途,第二