问题描述
我在数据库(SpatiaLite数据库)中有两个表(表A和表B)。我想使用两个外键(TableA.Location&TableB.LSD,TableA.LICENCE_NO和TableB.Licence_No)将表A中的所有条目与表B连接起来;但是,表A中将有多个INCIDEN_NO条目与表B中的联接行匹配。
由于表B中会有许多与Licence_No相关的INCIDEN_NO条目,因此我希望在表B中与外键对齐的所有LIC_LI_NO条目之间平均分配INCIDEN_NO条目。表A中的行可以随机地分配给表B中的每个LIC_LI_NO,并且没有特定的顺序。
我似乎找不到该操作的sql表达式,这使我困扰了好几个星期。
解决方法
您可以将行随机匹配,例如:
with B as (
select row_number() over () as rn,lic_li_no
from B
),A as (
select abs(random()) % cntb + 1 as randnum,a.*
from A cross apply (select count(*) as cntb from B) b
)
select *
from A inner join B on A.randnum = B.rn;
您还可以生成叉积并保留随机行。我在SQLite上尝试了该查询,但它似乎没有按我预期的那样工作:
select * from A cross join B where abs(random()) % 20 = 1
也就是说,我不了解所有这些操作的目的,并且在数据库中做这件事当然不是普遍的事情。