从多个表中选择最大数量

Posted

技术标签:

【中文标题】从多个表中选择最大数量【英文标题】:Select Max Number From Multiple Tables 【发布时间】:2018-03-20 07:13:03 【问题描述】:

我正在研究自动生成代码收据编号。这是我的代码:

var conrecipt = new SqlConnection(
    ConfigurationManager.ConnectionStrings["con"].ConnectionString);
conrecipt.Open();
var cmd = new SqlCommand("Select COALESCE(MAX(Reciptno),0) from Registration", conrecipt);
int i = Convert.ToInt32(cmd.ExecuteScalar());
conrecipt.Close();
i++;
Label3.Text = Reciptno + i.ToString();

一切正常。但我需要检查 3 个表:Registration、Advance 和另外一个表,并且需要从这些 id 中找到最大值。

如何在 Asp.Net C# 和 MS SQL Server 2012 中执行此操作?

【问题讨论】:

这是一个有缺陷的设计,势必会给你带来越来越多的问题,尤其是在多用户环境中 这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。 为什么你需要这样做? 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。 【参考方案1】:
SELECT MAX(M)
FROM
(
    SELECT MAX(Value) as M Table1
    UNION ALL
    SELECT MAX(Value) as M Table2
    UNION ALL
    SELECT MAX(Value) as M Table3
) as x

而且一般情况下对所有三个表都使用一个序列更正确,新值的定义不会有问题

【讨论】:

【参考方案2】:

你可以使用 union 来获取所有的 reciptno 并选择最大值

 select COALESCE(MAX(Reciptno),0) 
   from (
    Select Reciptno 
    from Registration
    UNION 
    Select Reciptno 
    from Advance
    UNION 
    Select Reciptno  
    from one_more_table
    ) as t

如果你有 nvarchar 你可以使用转换

select COALESCE(MAX( convert (int, t.Reciptno)),0) 
   from (
    Select Reciptno 
    from Registration
    UNION 
    Select Reciptno 
    from Advance
    UNION 
    Select Reciptno  
    from one_more_table
    ) as t

【讨论】:

您好,先生,谢谢您的回复,我试试这个,但在表 1 收据中最高的是 02,在表 2 中收据编号是 010,在表 3 中收据编号是 037,所以它必须显示 037 但是其显示09来自表2 @Vikas .. 但是.. ? 对不起我的英语先生 不应该是UNION ALL 而不是UNION @Vikas:你在这个序列中使用 VarChars 吗?哎哟。顺便说一句,您是否注意到您的方法也因单个表而失败:-)【参考方案3】:

使用存储过程来实现 ID 逻辑。在存储过程中,您可以从所有相关表中找到 ID 并计算最大 ID。然后,您将从应用程序调用存储过程。

要获得更好的解决方案,请阅读实体关系设计。收据是一个实体,它应该在一个地方定义收据,包括其 ID(主键)。如果在其他表中使用了收据 ID,则这称为外键,应在数据库中强制执行,以确保表中引用的每个 ID 都已存在于“主”收据表中。

【讨论】:

您好先生,Under先生,非常感谢您给我的想法,这对我保住我的工作非常有帮助,非常感谢

以上是关于从多个表中选择最大数量的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sqlite 表中选择文本中的多个最大值

从多个表中选择 - 一对多关系

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录

使用 GROUP BY 从多个表中选择

如何从不同的表中选择数据?

Android Image Picker 从图库中选择多个图像,最大限制为 5