我是mysql的新手,我需要一些帮助。
我的数据库中有10个表。
他们被命名为" hibernate"和架构是这样的
专栏"实体"包含数据库中其他表的名称。
我需要的是查询,它会为每个表返回一行,有3列:
像这样:
如果它可以为每个" hibernate"做它会很棒。表并从"实体"中获取TableName。列和获取该TableName的MaxId并返回如上图所示的行" next_hi"还
编辑:
如果通过阅读" hibernate"中的表名来解决这个问题是不可能的。表 如果我可以使用Query中的表名来处理这个名称,那么它也会有所帮助。
我有一个我为一张桌子做的例子"帐户":
SELECT
hibernate.entity as TableName,
hibernate.next_hi,
MAX(Account.Id) as MaxId
From Account
INNER JOIN hibernate
ON "Account"=hibernate.entity;
但现在我不知道如何修改此查询以便为多个表返回此内容。
答案 0 :(得分:1)
对我来说最好的方法是使用触发器:
-- change end of line DELIMITER
DELIMITER //
DROP TRIGGER IF EXISTS `trg_account_last_id`;
//
CREATE TRIGGER `trg_account_last_id`
AFTER INSERT ON `Account`
FOR EACH ROW
BEGIN
UPDATE `hibernate`
SET `hibernate`.`last_id` = NEW.`id`
WHERE `hibernate`.`entity` = 'Account';
END;
//
DELIMITER ;
在每张桌子上放置这个简单的触发器,用于更新last_id
表格上的hibernate
字段。
通过这个简单的select * from hibernate
会给你你想要的东西......
但这并没有真正优化。这行得通。在您需要此数据后依赖它。也许硬编码版本更好......
如果你想使用硬编码:
(
SELECT
`hibernate`.`entity` as `TableName`,
`hibernate`.`next_hi`,
(SELECT MAX(`Id`) FROM `Account`) as `MaxId`
FROM `hibernate`
WHERE `hibernate`.`entity` = "Account"
)
UNION ALL (
SELECT
`hibernate`.`entity` as `TableName`,
`hibernate`.`next_hi`,
(SELECT MAX(`Id`) FROM `Page`) as `MaxId`
FROM `hibernate`
WHERE `hibernate`.`entity` = "Page"
)
UNION ALL (
SELECT
`hibernate`.`entity` as `TableName`,
`hibernate`.`next_hi`,
(SELECT MAX(`Id`) FROM `User`) as `MaxId`
FROM `hibernate`
WHERE `hibernate`.`entity` = "User"
)
-- and again for other tables