• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

MS SQL Table加入

sql-server 来源:Vermonster 3次浏览

我的数据库有一个名为record_num的字段,用于每个表中。无论该行所属的表是什么,每行都有一个record_num列。MS SQL Table加入

我有大约5个表使用哪个表取决于输入是什么(错误,配方,警报等)。每个条目都有其独特的record_num。我想加入我所有的表格,看看我的record_num中是否有空白,以确保在生成信息的软件中没有错误。加入似乎只是像价值观一样结合。我想加入他们所有的人,以确保序列是正确的。

例如,如果alarm表有record_num值433和error具有record_num 432和434,我想加入得到432433434,所以我可以检查间隙(缺少项)的序列。

我该怎么做?


===========解决方案如下:

您需要一个UNION,而不是一个连接。与一些其它技术结合这一点,你可以在一个查询发现任何间隙:

with seq as (
    select record_num 
    from [error] 
    union 
    select record_num 
    from alarm 
    order by record_num 
), 
seq2 as (
    select record_num, row_number() over (order by record_num) as ordinal 
    from seq 
) 
select s1.record_num 
from seq2 s1 
inner join seq2 s2 on s2.ordinal = s1.ordinal + 1 and s2.record_num <> s1.record_num + 1 

或与LAG关键字:

with seq as (
    select record_num 
    from [error] 
    union 
    select record_num 
    from alarm 
    order by record_num 
), 
lags as (
    select record_num, lag(record_num, 1, record_num -1) over (order by record_num) as prior_record 
    from seq 
) 
select record_num 
from lags 
where record_num - prior_record > 1 

您还需要修复损坏的数据库模式。对于所有表格通用的record_num字段是可以的,但是像5个不同表格中的数据一样分裂并不好,并且允许外部系统生成您的ID并不好。您身份特征或内置于Sql Server中的序列。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)