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
就是说,我不明白这一切背后的目的,这在数据库中肯定不是一件常见的事情。
我在数据库(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
就是说,我不明白这一切背后的目的,这在数据库中肯定不是一件常见的事情。