MS SQL表连接

时间:2015-06-01 21:09:14

标签: sql-server join

我的数据库有一个名为record_num的字段,用于每个表。无论行属于哪个表,每行都有一个record_num列。

我有大约5个表,其中使用哪个表取决于输入是什么(错误,配方,警报等)。每个条目都有自己唯一的record_num。我想加入我的所有表格,看看我的record_num中是否有任何空白,以确保生成信息的软件中没有错误。加入似乎只是结合了类似的值。我想加入所有这些以确保序列正确。

例如,如果alarm表的record_num值为433且error有record_num 432和434,我想加入以获得432,433,434,这样我就可以查看序列的缺口(缺少条目)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您需要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 ,而不是加入。将此与其他一些技术相结合,您可以在一个查询中找到任何差距:

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

或使用LAG关键字:

record_num

您还需要修复损坏的数据库架构。所有表共有的std::vector::begin字段是可以的,但是在5个不同的表中分割数据并不合适,并且允许外部系统生成您的ID也不行。您是身份功能或Sql Server中内置的序列。