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

SQL many-to-one join using two foreign keys

我在数据库(SpatiaLite 数据库)中有两个表(Table A 和 Table B)。我想使用两个外键(TableA.Location & TableB.LSD、TableA.LICENCE_NO & TableB.Licence_No 将 Table A 和 Table B 中的所有条目连接起来);但是,Table A 中将有多个 INCIDEN_NO 条目与 Table B 中的连接行相匹配。

由于 Table B 中有很多 INCIDEN_NO 条目与 Licence_No 相关联,我想将 INCIDEN_NO 条目平均分配给所有 LIC_LI_NO Table B 中与外键对齐的条目。 Table A 中的行可以随机分配给 Table 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

就是说,我不明白这一切背后的目的,这在数据库中肯定不是一件常见的事情。