我是一名实习生,接管了我公司前任实习生的一个项目,我的数据库经验非常少。项目范围已扩大,我需要从数据库中获取更多数据。我有以下SQL查询:
select
DSR_SEGMENT_LIGNE.SEG_NOM as "name",
DSR_NOEUD_SIMUL.NOE_NUMERO_NOEUD as "start",
DSR_NOEUD_SIMUL_ARRIVEE.NOE_NUMERO_NOEUD as "end",
DSR_SEGMENT_LIGNE.SEG_CIRCUIT as "circuit",
case DSR_SEGMENT_LIGNE.SEG_R0_MANUELLE
when 0 then DSR_SEGMENT_LIGNE.SEG_R0
else DSR_SEGMENT_LIGNE.SEG_R0_MANUELLE
end as "r0",
case DSR_SEGMENT_LIGNE.SEG_X0_MANUELLE
when 0 then DSR_SEGMENT_LIGNE.SEG_X0
else DSR_SEGMENT_LIGNE.SEG_X0_MANUELLE
end as "x0",
case DSR_SEGMENT_LIGNE.SEG_R1_MANUELLE
when 0 then DSR_SEGMENT_LIGNE.SEG_R1
else DSR_SEGMENT_LIGNE.SEG_R1_MANUELLE
end as "r1",
case DSR_SEGMENT_LIGNE.SEG_X1_MANUELLE
when 0 then DSR_SEGMENT_LIGNE.SEG_X1
else DSR_SEGMENT_LIGNE.SEG_X1_MANUELLE
end as "x1",
sum(DSR_SECTION_LIGNE.SEC_LONGUEUR) as "length",
DSR_SEGMENT_LIGNE.SEG_PARALLELE as "parallel",
from
DSR_SEGMENT_LIGNE
inner join DSR_NOEUD_SIMUL
on DSR_SEGMENT_LIGNE.SEG_ID_NOEUD_DEPART
= DSR_NOEUD_SIMUL.NOE_ID_NOEUD
inner join DSR_NOEUD_SIMUL DSR_NOEUD_SIMUL_ARRIVEE
on DSR_SEGMENT_LIGNE.SEG_ID_NOEUD_ARRIVEE
= DSR_NOEUD_SIMUL_ARRIVEE.NOE_ID_NOEUD
inner join DSR_LIGNE
on DSR_LIGNE.LIG_ID_LIGNE
= DSR_SEGMENT_LIGNE.LIG_ID_LIGNE
inner join DSR_SECTION_LIGNE
on DSR_SEGMENT_LIGNE.SEG_ID_SEGMENT
= DSR_SECTION_LIGNE.SEG_ID_SEGMENT
where DSR_LIGNE.LIG_NOM = "3040"
group by
DSR_SECTION_LIGNE.SEG_ID_SEGMENT
order by
1, 2
哪个输出:
name start end circuit r0 x0 r1 x1 length parallel
A 1370 1382 1 0,0005425630938234 0,00167906265425173 7,3195053173195E-5 0,00055148562601198 0,177540954416641 0
B 1382 1383 1 0,0126386706603645 0,0378025148848846 0,00563519872024541 0,0131910224409082 3,70050627461981 1
C 1382 1383 2 0,0126386706603645 0,0378025148848846 0,00563519872024541 0,0131910224409082 3,70050627461981 1
D 1383 5515 1 0,021837386745766 0,0747186186014143 0,00948008366199402 0,023230913897742 6,82876115295014 0
从其他表中收集其他数据所需的相关元素是“名称”(在这种情况下,四个名称是A,B,C和D,并且始终是唯一的)。是否有可能以某种方式遍历这四行(例如:for each "name" do ...
)而无需手动命名名称(例如where name = "A"
)并为每个名称收集特定于名称的数据并将该数据放入该名称中行?
答案 0 :(得分:3)
你没有一般使用sql“循环遍历行”,所以你需要以不同的方式思考这个问题。
听起来您希望其他表在名称上加入此查询。
要做到这一点,只需添加更多联接,如:
inner join SOME_OTHER_TABLE
on SOME_OTHER_TABLE.SOME_COL = DSR_SEGMENT_LIGNE.SEG_NOM
然后只需将您想要的其他表中的其他列添加到您的选择中。
我在这里做了一些简化的假设(原始查询和你要加入的其他表的行之间有1:1的对应关系)。这可能有效,也可能无效,具体取决于实际关系是什么,以及您尝试从其他表中获取的数据。