我正在制作一个无环图数据库。
表材料(id_item,id_collection,...)主键(id_item,id_collection)
(项目本身可以是收集,项目可以是集合的收集)
我的约束是id_collection> id_item(要防止某个周期 - 第一步)
所以在插入之前,我需要知道" max(max(id_item),max(id_collection)))"
我可以通过执行两个值获得两个值。但无法获得最大的最大值:
SELECT max(id_collection)
FROM material
UNION
SELECT max(id_item)
FROM Material
我试图做到这一点:
DELIMITER $$
CREATE PROCEDURE `findmax`
(
)
BEGIN
DECLARE max_item SMALLINT;
DECLARE max_collection SMALLINT;
DECLARE max_of_both SMALLINT;
SELECT MAX(id_item)
INTO max_item
FROM material
SELECT MAX(id_collection)
INTO max_collection
FROM material
SET max_of_both = MAX(max_item, max_collection)
END$$
DELIMITER ;
我的汽油用光了。有人有一个想法吗?
最好的问候
falt
n.b。2个有关无环图的有用来源:
数据库汤:触发防止在Postgresql中的周期
codeproject:无环图模型
您应该能够在mysql中使用GREATEST()
函数。
尝试以下操作:
SELECT GREATEST(
(SELECT MAX(id_item) FROM material),
(SELECT MAX(id_collection) FROM material));
这将选择最大的项目,无论是最大(id_item)还是最大(id_collection)。
编辑
看起来可能更干净的东西。GREATEST()
函数采用传递的最大参数,因此,如果您本身使用它,则它将返回,但是在表中有很多行,但是选择ID_ITEM或ID_Collection,它越来越大。话虽如此,您可以将GREATEST
包装在MAX()
内部以完成相同的任务:
SELECT MAX(GREATEST(id_item, id_collection))
FROM material;
这是一个SQL小提琴示例。