簡體   English   中英

使用兩個外鍵的 SQL 多對一連接

[英]SQL many-to-one join using two foreign keys

我在數據庫(SpatiaLite 數據庫)中有兩個表(表 A 和表 B)。 我想使用兩個外鍵(TableA.Location & TableB.LSD、TableA.LICENCE_NO & TableB.Licence_No)將表 A 中的所有條目與表 B 連接起來; 但是,表 A 中將有多個 INCIDEN_NO 條目與表 B 中的連接行匹配。

由於將有許多與表 B 中的 Licence_No 相關聯的 INCIDEN_NO 條目,我想將 INCIDEN_NO 條目均勻分布在表 B 中與外鍵對齊的所有 LIC_LI_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

也就是說,我不明白這一切背后的目的,這在數據庫中當然不是一件常見的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM