如何解决这个SQL查询难题?

时间:2019-09-24 03:31:55

标签: sql oracle

如果有人在前端屏幕的传输列中输入transport ='Bus'或'van',有人可以提出一些解决条件的SQL查询的想法,它应该获取与输入值相关的数据。 或者,如果他们在前端屏幕的竞价栏中输入spot ='loc1'或'loc2',则应该只获取与输入竞价值相关的数据,而不能提取其他竞价。

这应该使用SQL查询而不是使用plsql块

完成
 --- this is the query i tried
SELECT * FROM transport_tb
 WHERE transport = 'Bus'
   OR spot = 'loc1';

 ---transport_tb table
    Name    Transport    spot
   ------   ---------   ------
   Suresh     Bus        loc1
   Raj        Van        loc2
   Karthi     Van        loc1
   Ram        Bus        loc2 

2 个答案:

答案 0 :(得分:1)

以下查询将执行您想要的操作:

SELECT
    *
FROM
    TRANSPORT_TB
WHERE
    TRANSPORT = COALESCE(&&TRANSPORT_FROM_UI,TRANSPORT) --'Bus'
    AND SPOT =  COALESCE(&&SPOT_FROM_UI,TRANSPORT); --'loc1';

由于我不知道完整的要求,因此我使用了AND。如果需要,请使用OR运算符。

用实际的变量名替换&&TRANSPORT_FROM_UI&&SPOT_FROM_UI

干杯!

答案 1 :(得分:1)

您可以将SQL查询重新编程为动态查询。
您将部分SQL代码设置为在输入发送到脚本后立即动态生成。如果您使用的是PHP,则可以在SQL代码中使用内爆函数。

SELECT * FROM transport_tb
 WHERE 

    (transport = 'Bus' OR  transport = 'Van' )  -- dynamic code 
   OR 
     (spot = 'loc1' OR spot = 'loc2')  -- dynamic code
   ;

为什么使用这种语法? (条件或条件)或(条件或条件) 通过这种逻辑,中间的“或”会搜索字段之间的可能性。圆括号内的OR搜索该字段中值的可能性。