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