Oracle-SQL:如果WHERE子句参数为null,则不要考虑AND

时间:2018-07-04 08:17:58

标签: sql database oracle

我正在搜索它,但找不到任何合适的解决方案。

SELECT a, b, c FROM table WHERE d := parameter1 AND e := parameter2;

因此,如果给出d和e,则结果查询有效。 始终需要d参数,但e是可选参数,因此,如果没有e的输入,我不想考虑AND e := parameter2语句,只使用d参数获取所有行。

4 个答案:

答案 0 :(得分:3)

-type

请注意不要用WHERE d = parameter1 AND (e = parameter2 OR parameter2 is null) 代替=

答案 1 :(得分:1)

SELECT a, b, c FROM table WHERE d := parameter1 AND (e is not null and e := parameter2 or e is null);

答案 2 :(得分:0)

尝试一下

SELECT a, b, c FROM table WHERE d := parameter1 AND case when e is null then parameter2 else e end := parameter2;

答案 3 :(得分:0)

其他答案通常是正确的,但 实际上,使用两个不同的查询并在调用代码中选择哪个查询可能会更好。虽然比过去聪明,但查询计划可以根据第一次调用中使用的参数来“锁定”。如果这些都是非典型的,您可能会得到通常不是最好的计划。在DB引擎之间,这种行为会有所不同(Oracle我认为这是相当不错的)。

看到您在进行调用时已经知道自己是否有值,只需执行一点SQL或另一位。

如果您拥有很多价值,那么这可能会一发不可收拾,但是您也有更大的机会错过最佳执行计划。