Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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 - Fatal编程技术网

SQL-基于另一个表中的信息在表中搜索并返回多个结果

SQL-基于另一个表中的信息在表中搜索并返回多个结果,sql,Sql,我有一个表“trace”,其中包含以下信息: | galaxyId | lastProgenitorId | ----------------------------------- | 0 | 27 | | 2890 | 3001 | | ... | ... | | 189279 | 190056 | -----------

我有一个表“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,检索maintable中满足以下条件的所有对应行:

main.galaxyId BETWEEN trace.galaxyId AND trace.lastProgenitorId
这可能会返回多个结果,结果如下(来自上面的示例):

我觉得这很简单,但我的大脑就是不知道怎么做!我觉得需要分区吗?非常感谢您的帮助。提前感谢。

使用连接:

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'

您使用的是哪种数据库管理系统?博士后?Oracle?我正在使用一个外部服务,它的文档相当缺乏。所以答案是我不知道。如果main有另一个列m.snap,我只想搜索具有此特定值的对象作为附加条件,那么此查询将如何更改?@CarlM just add和m.snap=specific valueAdded作为@SEBBINFIELD suggested谢谢。作为进一步的练习,是否有方法将每个t.galaxyId返回的行数限制为3,例如?更复杂。查看ROW_NUMBER()子句和子查询。首先尝试一下,如果你被卡住了,建议你问一个新问题
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'