我有一张桌子' trace'其中包含以下信息:
| galaxyId | lastProgenitorId |
-----------------------------------
| 0 | 27 |
| 2890 | 3001 |
| ... | ... |
| 189279 | 190056 |
-----------------------------------
我有另一张桌子' main'其中包括以下内容:
| galaxyId | stellarMass | umag | imag |
------------------------------------------------
| 25 | 10.5 | -21 | -22 |
| 2901 | 10.8 | -23 | -21 |
| 3000 | 10.0 | -22 | -21 |
| ... | ... | ... | ... |
| 200000 | 10.1 | -22 | -22 |
------------------------------------------------
我希望做的是,对于每个trace.galaxyId,检索以下条件满足的维护中的所有相应行:
main.galaxyId BETWEEN trace.galaxyId AND trace.lastProgenitorId
这可能会返回多个结果,结果将是(来自上面的示例):
| trace.galaxyId | main.galaxyId | main.umag | main.imag |
------------------------------------------------------------------
| 0 | 25 | -21 | -22 |
| 2890 | 2901 | -23 | -21 |
| 2890 | 3000 | -22 | -21 |
------------------------------------------------------------------
我觉得这很容易,但我的大脑却看不出怎么做!我觉得需要PARTITION BY吗?任何帮助非常感谢。提前谢谢。
答案 0 :(得分:1)
使用联接:
SELECT
t.GalaxyId As TraceGalaxyId,
m.GalaxyId as MainGalaxyId,
m.umag,
m.imag
FROM trace
JOIN main m
ON m.galaxyId BETWEEN t.GalaxyId AND t.lastProgenitorId AND m.snap = 'Specific Value'