Mysql 如何在我的sql中应用多个或嵌套游标并将数据存储在临时表中?
表1:机场Mysql 如何在我的sql中应用多个或嵌套游标并将数据存储在临时表中?,mysql,asp.net,stored-procedures,cursor,temp-tables,Mysql,Asp.net,Stored Procedures,Cursor,Temp Tables,表1:机场 Id airportname 1 NYK(newyork) 2 DXB (dubai) 3 BOM (Bombay) 4 DEL (delhi) 现在我的死记硬背的细节 First Last Detail Route 1 : Nyk - BOM : Nyk - DXB - BOM 2 : Nyk - Del : Nyk - DXB - BOM -Del 表2:分段详细信息 SegmentdetailsId RouteId O
Id airportname
1 NYK(newyork)
2 DXB (dubai)
3 BOM (Bombay)
4 DEL (delhi)
现在我的死记硬背的细节
First Last Detail Route
1 : Nyk - BOM : Nyk - DXB - BOM
2 : Nyk - Del : Nyk - DXB - BOM -Del
表2:分段详细信息
SegmentdetailsId RouteId Originairport destibation airport
1 1 1 2
2 1 2 3
3 1 3 4
4 2 1 2
5 2 2 3
注意:用户可以在路线上进行任何分段旅行,例如Nyk到DXB(1-2)、Nyk-Bom(1-3)、Nyk-Del(1-4)或DXB-Bom(2-4)等
现在我的问题是,当我将参数作为始发机场ID:1和目的地ID:4传入时,我的结果将如下存储过程中的表所示
First Last Detail Route
1 : Nyk - BOM : Nyk - DXB - BOM
2 : Nyk - Del : Nyk - DXB - BOM -Del
案例-1
诱人的:路线细节
SegmentdetailsId RouteId
1 1
2 1
3 1
SegmentdetailsId RouteId
1 1
2 1
4 2
5 2
SegmentdetailsId RouteId
1 1
2 1
3?? 1??
4 2
5 2
或
案例-2
我传入的参数为始发机场ID:1和目的地ID:3,所以我的结果如下表所示
Temptable: routewise_segmentdetails
SegmentdetailsId RouteId
2 1
5 2
诱人的:路线细节
SegmentdetailsId RouteId
1 1
2 1
3 1
SegmentdetailsId RouteId
1 1
2 1
4 2
5 2
SegmentdetailsId RouteId
1 1
2 1
3?? 1??
4 2
5 2
或
案例-3
我传入的参数是始发机场ID:2和目的地ID:3,所以我的结果如下表所示
Temptable: routewise_segmentdetails
SegmentdetailsId RouteId
2 1
5 2
可能我可以使用嵌套游标,然后获取值,但我不知道将游标嵌套在表中。这将返回您的预期结果集…您可以尝试创建两个提供的表,并运行以下SQL,它将明确返回您的预期结果集:
select SegmentdetailsId,RouteId from segmentdetails
where destinationairport<= "Your Number'
从SECTIONDETAILS中选择SECTIONDETAILSID、RouteId
目的地机场> P>这里是考虑所有可能性的最终SQL。
select SegmentdetailsId , RouteId
from segmentdetails
where ORIGINAIRPORT >= 2 and DESTIBATIONAIRPORT<= 3
选择SegmentdetailsId,RouteId
从细节
其中ORIGINAIRPORT>=2和DESTIBATIONAIRPORT视为表的结构-以及存储数据的方式意味着分段详细信息按顺序存储。有了这些信息,你根本不需要在临时表或类似的东西中存储任何东西
我认为这应该可以做到这一点——您只需编写两个子查询,每个子查询拉取一个不同的routeId并将其连接回原始表以及其他子查询,但也可以使用子查询中使用的相同参数约束外部查询:
select
core.segmentDetailsId,
core.routeId
from
segmentDetails core
join (
select distinct
routeId
from
segmentDetails
where
originAirport=param1
) sub1
on core.routeId=sub1.routeId
join (
select distinct
routeId
from
segmentDetails
where
destinationAirport=param2
) sub2
on core.routeId=sub2.routeId
and sub1.routeId=sub2.routeId
where
core.originAirport>=param1
and core.destinationAirport<=param2
order by
segmentDetailsId,
routeId
您将destination设置为3,但显示的是segdetid3,其原点为3,而destination为4。我想你的意思是不在结果中显示这一行 这将只返回目的地机场路线,但实际上我希望所有的部分详细信息与起源和目的地也。线对为1-2,2-3,3-4,因此段详细信息id为1,2,3,路线为1thx,但如果我的原始id=1,destinationid=4,那么它会工作吗?因为我测试的记录只针对
段ID routeid起始目的地
1 1 2 2 1 2 3 3 3 4
段:1-2,3-4,但仍然是2-3(剩余部分)记录缺失您想要哪种输出?1或2?然后我将根据您的要求提供ans。@dipali我想创建动态查询n根据起点和终点让我们尝试使用1,但请记住不要将所有数据作为数字进行比较,如IDWhat is your requirement@Imran?使用或be可以轻松检索上述输出两个条件之间。但是,我认为你的问题更复杂。你为什么要创建动态查询和嵌套游标?@winky yes同意上面的说法,put只能在case-2和case-3中检索或查询,但是case-1呢让我们看看我的路线是1-2-3-4(机场id)现在我可以乘坐1-4或2-3或1-3的旅程。我的其他票价和时间细节基于分段详细信息。现在您的问题已经解决了…好的,我正在尝试非常好的解决方案。对于您的查询,分段详细信息Id 3和路线Id 1不会出现