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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...