我有两个表,我已经在其中执行了内连接。我有一个场景,我需要根据这两个条件从第一个表中获取值。
我的查询是
SELECT rm.ROUTE_ID
, rm.ROUTE_CODE
, rm.START_PLACE_ID
, rm.END_PLACE_ID
, rm.IS_ACTIVE
, rm.LINKED_ROUTE
FROM OPRS_ROUTE_MASTER rm
INNER JOIN OPRS_ROUTE_HALTS rh
ON rh.ROUTE_ID = rm.ROUTE_ID
WHERE rh.PLACE_ID = '51'
现在我需要在where子句中再有两个条件。
case 1: when rm.START_PLACE_ID > 0 then i need to append AND rm.START_PLACE_ID to where clause
case 2: when rm.END_PLACE_ID > 0 then i need to append AND rm.START_PLACE_ID to where clause
如果两者都大于零,那么我需要将两个案例都附加到where子句。
有人可以帮助我
答案 0 :(得分:0)
除非我遗漏了您的要求,否则您只需使用WHERE
或OR
AND
过滤条件即可
SELECT rm.ROUTE_ID
, rm.ROUTE_CODE
, rm.START_PLACE_ID
, rm.END_PLACE_ID
, rm.IS_ACTIVE
, rm.LINKED_ROUTE
FROM OPRS_ROUTE_MASTER rm
INNER JOIN OPRS_ROUTE_HALTS rh
ON rh.ROUTE_ID = rm.ROUTE_ID
WHERE rh.PLACE_ID = '51'
OR (or AND)
(
(rm.START_PLACE_ID > 0 OR rm.END_PLACE_ID > 0)
AND rm.START_PLACE_ID = yourValue
)
答案 1 :(得分:0)
或许这样的事情?
SELECT rm.route_id,
rm.route_code,
rm.start_place_id,
rm.end_place_id,
rm.is_active,
rm.linked_route
FROM oprs_route_master rm
INNER JOIN oprs_route_halts rh
ON rh.route_id = rm.route_id
WHERE rh.place_id = '51'
AND ( rm.start_place_id <= 0
OR RM.start_place_id = xxx )
AND ( rm.end_place_id <= 0
OR RM.start_place_id = yyy )
希望有所帮助。
答案 2 :(得分:0)
我将查询设置为:
select rm.ROUTE_ID ,
rm.ROUTE_CODE ,
rm.START_PLACE_ID ,
rm.END_PLACE_ID ,
rm.IS_ACTIVE ,
rm.LINKED_ROUTE
from OPRS_ROUTE_MASTER rm
join OPRS_ROUTE_HALTS rh on rh.ROUTE_ID = rm.ROUTE_ID
and rh.PLACE_ID = '51'
where rm.START_PLACE_ID = case when rm.START_PLACE_ID > 0 then @myStartPlaceID else rm.START_PLACE_ID end
and rm.END_PLACE_ID = case when rm.END_PLACE_ID > 0 then @myEndPlaceID else rm.END_PLACE_ID end
如果表格行在所需列(START_PLACE_ID
或END_PLACE_ID
)中具有正值,则会将该列与所需值进行比较,否则将其与自身进行比较。
这避免了使用交替(OR
运算符):使用OR
会降低执行计划,强制执行表或索引扫描而不是搜索。