MySQL-如何使列成为来自不同表的其他两列的总和?
我是MySQL和数据库的新手。是否可以创建一个表,其中一列是来自另外两个表的另外两列的总和。 例如,如果我有数据库书籍:MySQL-如何使列成为来自不同表的其他两列的总和?,mysql,sql,Mysql,Sql,我是MySQL和数据库的新手。是否可以创建一个表,其中一列是来自另外两个表的另外两列的总和。 例如,如果我有数据库书籍: CREATE TABLE `books` ( `book_id` int(100) NOT NULL, `book_name` varchar(20) NOT NULL, `book_author` varchar(20) NOT NULL, `book_co-authors` varchar(20) NOT NULL, `book_edition` ti
CREATE TABLE `books` (
`book_id` int(100) NOT NULL,
`book_name` varchar(20) NOT NULL,
`book_author` varchar(20) NOT NULL,
`book_co-authors` varchar(20) NOT NULL,
`book_edition` tinyint(4) NOT NULL,
`book_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`book_amount` int(100) NOT NULL COMMENT 'Amount of book copies in both University libraries'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如何使列book\u amount
成为library1
和library2
表中book\u id=book\u id
的两列book\u amount
的总和?
图书馆1:
CREATE TABLE `library1` (
`book_id` int(11) NOT NULL,
`book_amount` int(11) NOT NULL,
`available_amount` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
只要列是有效的,就可以使用任何类型定义列,然后使用其他表中的数据填充它。这通常被称为“非规范化”,因为在理想情况下,您需要将数据存储在其他表中,并根据需要进行计算,这样就不会出现保存的值与源数据不同步的情况 您还可以定义一个
视图
,它类似于一个保存的查询,其行为类似于一个表。这可以做各种事情,比如动态查询其他表,并将结果显示为列。“物化视图”是一些数据库支持的一种视图,它根据一些隐式触发器自动更新和保存视图。非物化视图速度较慢,但在您的情况下,速度差异可能不是什么大问题
所以你可以选择如何表达它
需要注意的一点是,您应该使用
INT
作为默认的“整数”字段,而不是像INT(100)
这样不可靠的东西。整数字段的数字指定了您期望的有效数字的数量,并且由于INT
最多只能存储11个,这是非常不符合要求的。不是直接的,但是有几种方法可以实现您想要的
在select子句中创建一个psuedo列,该列将添加其他两列
select *, columna+columnb AS `addition` from books
不要忘记将columna
和columnb
替换为列的名称,并将添加到您希望psuedo列具有的名称
或者,您可以使用视图以相同的方式自动添加psuedo字段。但是,视图没有索引,因此在视图中执行查找和加入索引可能会变得非常缓慢
您还可以使用触发器在插入和更新时设置值,或者简单地计算插入数据库的语言中的值。如果library1
和library2
表具有与表books
类似的模式,则以下查询将起作用:
Insert into books
select l1.book_id,
l1.book_name,
l1.book_authors,
l1.book_co_authors,
l1.book_edition,
l1.book_creation,
(l1.book_amount + l2.book_amount)
from library1 l1
inner join library2 l2
on l1.book_id = l2.book_id
group by l1.book_id
;
因此,所有其他列都位于具有samme数据类型的表library1
和library2
中?请参阅