我正在搜索它,但找不到任何合适的解决方案。
SELECT a, b, c FROM table WHERE d := parameter1 AND e := parameter2;
因此,如果给出d和e,则结果查询有效。
始终需要d参数,但e是可选参数,因此,如果没有e的输入,我不想考虑AND e := parameter2
语句,只使用d参数获取所有行。
答案 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或另一位。
如果您拥有很多价值,那么这可能会一发不可收拾,但是您也有更大的机会错过最佳执行计划。