SQL使用两个外键进行多对一联接

问题描述

我在数据库(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表达式,这使我困扰了好几个星期。

picture of the join and potential output table

解决方法

您可以将行随机匹配,例如:

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

也就是说,我不了解所有这些操作的目的,并且在数据库中做这件事当然不是普遍的事情。