0

我有这样的代码:

Search(for 'this' using 'a','b','c','d')
if result is not found
    search(for 'this' using null,'b','c','d')
    if result is not found
      ...
      if result is not found
           search(for 'this' using null,null,null,null)
 ...
return 

它是递归调用自身但参数较少的存储过程。函数内部是一个基于参数生成的动态查询(一些参数涉及加入另一个表,一些只是 where 子句中的附加条件)

有人告诉我,这会浪费性能,因为它需要一次又一次地重新搜索整个表。

我有这样的想法,如果我们先搜索所有内容,然后从该结果开始过滤它。可能会更好。

我可以做些什么来改进代码?有没有办法通过普通查询获得相同的结果?

4

1 回答 1

0

您也许可以使用 UNION,如下所示:

SELECT * FROM TABLE
  WHERE COL1='A'     AND COL2='B' AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2='B' AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 IS NULL AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 IS NULL AND COL4 IS NULL

分享和享受。

于 2012-08-31T12:42:01.867 回答