Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用两个外键进行SQL多对一联接_Sql_Qgis_Spatialite - Fatal编程技术网

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

使用两个外键进行SQL多对一联接,sql,qgis,spatialite,Sql,Qgis,Spatialite,我在数据库(SpatiaLite数据库)中有两个表(表A和表B)。我想使用两个外键(TableA.Location&TableB.LSD、TableA.License_NO&TableB.License_NO)将表A中的所有条目与表B连接起来;但是,表A中会有多个INCIDEN_NO条目与表B中的连接行匹配 由于表B中有许多与许可证号相关联的INCIDEN_NO条目,因此我希望将INCIDEN_NO条目平均分配到表B中与外键对齐的所有LIC_LI_NO条目中。表A中的行可以随机分配给表B中的每个

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

由于表B中有许多与许可证号相关联的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

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

请以表格文本的形式提供您的数据。这个小图像无法读取。根据您的数据,不清楚哪个表是父表,哪个表是子表。两个表中的键似乎都重复;因此,它们不是“键”。很抱歉,如果您右键单击图片并在新窗口中打开,您可以放大图片以使其可读。我不确定父表和子表的问题。我只是认为对该行具有唯一值的列将是关键。这些表是导入到名为Pipe_inc.sqlite的SpatiaLite数据库中的属性表。我对数据库和SQL非常陌生。随机许可证信息的目的是什么?这是关于创建测试数据还是什么?作为测试数据,这还不够好吗?许可证号适用于整个管道,但LIC号适用于管道的每个部分。表A中的数据表示一段时间内每个LIC_LI_NO的事件(INCIDEN_NO),但每个INCIDEN_NO的LIC_LI_NO对于每个网格正方形位置(位置)处的线段是不正确的。表B是每个网格正方形(400 m x 400 m)中每条管道的中点。每个电网sq中管道的许可证号是正确的,但可能有n个管道具有相同的许可证号。我想将表A中的事件随机分配到每个许可证号的中点。