有三个表,第一个表名是基线,其中包含所有受益人信息和一个名为 PPI得分的列,第二个表名为< strong> PPI_SCORE_TOOKUP ,其中包含六个列,位于 endline 名称的第三个表格下方,其中包含受益人终端评估数据以及 PPI_Score ,我想要的是,加入一些这些表的方式,但 PPI_SCORE_TOOKUP 表中没有基线和 endline 表的外键表 PPI_SCORE_TOOKUP , endline 和 endline 表中只有 PPI_Score ,我想查询显示一些如果基线表中的ppi值介于或等于 PPI_SCORE_START 和 PPI_SCORE_END ,并且它也是如果 endline 表中的ppi得分介于且等于 PPI_SCORE_START endline 数据及其六列的PPI得分>和 PPI_SCORE_END 都在一行中。
注意:我没有尝试任何查询,因为我不知道如何做到这一点,但我期待在这个问题的底部的预期结果。
表格如下
baseline table
ID NAME LAST_NAME DISTRICT PPI_SCORE
1 A A A 10
2 B B B 23
3 C C C 90
4 D D D 47
endline table
baseline_ID Enterprise Market PPI_SCORE
3 Bee Keeping Yes
2 Poultry No 74
1 Agriculture Yes 80
PPI_SCORE_TOOKUP table
ppi_start ppi_end national national_150 national_200 usaid
0 4 100 100 100 100
10 14 66.1 89.5 96.5 39.2
5 9 68.8 90.2 96.7 44.4
15 19 59.5 89.1 97.2 35.2
20 24 51.3 85.5 96.4 28.8
25 29 43.5 81.1 93.2 20
30 34 31.9 74.5 90.4 13.6
35 39 24.6 66.9 87.3 7.9
40 44 15.2 58 82.8 4.5
45 49 11.4 47.9 73.4 4.2
50 54 6 37.2 68.4 2.6
55 59 2.7 26.1 61.3 0.5
60 64 0.9 21 50.4 0.5
65 69 0 14.3 37.1 0
70 74 3 14.3 29.2 0
75 79 0 1.4 5.1 0
80 84 0 0 9.5 0
85 89 0 0 15.2 0
90 94 0 0 0 0
95 100 0 0 0 0
预期结果
答案 0 :(得分:0)
您的查询可以按以下方式进行:
SELECT *
FROM baseline b
LEFT JOIN endline e ON b.id = e.baseline_ID
LEFT JOIN PPI_SCORE_TOOKUP ppi ON b.PPI_SCORE BETWEEN ppi.ppi_start AND ppi.ppi_end
LEFT JOIN PPI_SCORE_TOOKUP ppi2 ON e.PPI_SCORE BETWEEN ppi2.ppi_start AND ppi2.ppi_end
这会将id
表中的baseline
与baseline_ID
表中的endline
匹配,保持可能的空值baseline
。然后,它会将PPI_SCORE
中的baseline
与来自ppi_start and ppi_end
的{{1}}进行匹配。然后我们加入PPI_SCORE_TOOKUP
PPI_SCORE
和endline
。
将*替换为您想要的任何字段。 See fiddle为工作示例