MS SQL Table加入

我的数据库有一个名为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中的序列。

以上是 MS SQL Table加入 的全部内容, 来源链接: utcz.com/qa/261953.html

回到顶部