我一直试图用HeidiSQL建立一个小型数据库,但我偶然发现了一个问题。我想在某个表中添加一个列,该列计算包含某个值的另一个表中的列数量。我尝试过设置一个默认值,输入一个如下所示的自定义值
SELECT COUNT(LidID) AS AantalSchepen FROM SCHIP WHERE SCHIP.LidID=LID.LidID尽管LidID是列的名称,但我希望计算行数,其中包含表芯片中的值与表盖子中的值相同。LidID值是表盖的主键,因此在逻辑上是表芯片中的外键。
但是,当我在自定义默认值字段中输入此语句时,它会告诉我默认值无效。我所做的是完全不可能的,还是我的SQL语句有缺陷?
编辑:数据库的目的是成为网站上表格中显示的信息来源。正如我在以前的答复中所读到的,我在这里试图做的事情是完全不可能的,所以另一种解决方案是.?
发布于 2015-04-24 12:46:44
通常,不能添加“运行查询”的默认值。这可能取决于数据库,但我想不出支持此功能的数据库。
您可以做的是使用视图访问数据:
create view v_lid as
select l.*,
(select count(*)
from SCHIP s
where s.LidID = l.LidID
) as AantalSchepen
from lid l;然后,当您访问视图时,您将获得该视图的最新值。
注意:这与“缺省”值略有不同,该值将在创建行时输入值。如果你真的想要的话,你需要一个扳机。或者,也许有一些日期逻辑会得出相同的值。
发布于 2015-12-10 09:50:39
在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(*)查询。
https://stackoverflow.com/questions/29847555
复制相似问题