描述:
我们正在使用 PostgreSQL 9.3 - Centos 6 x64。我们有一个 dtsc_search_data 表如下:
dtsc_search_data
id ---- c1 ---- c2 ---- c3
1 ---- 1 ---- 1 ---- 1
2 ---- 1 ---- 2 ---- 2
3 ---- 1 ---- 1 ---- 3
我们想在dtsc_search_data表上搜索“c1, c2, c3”列,条件是:如果在“c1”上找到seach_value,则返回;如果在“c1”上找不到 search_value,则在“c2”上找到,如果在“c2”上找到 search_value,则返回;否则返回(c3)。
例子:
search_value = 1 => "c1" = 1 => just search on "c1"
search value = 2 => "c1" != 2, "c2" = 2 => just search on "c2".
search_value = 3 => "c3"
代码(更新)
create table dtsc_search_data (id int, c1 int, c2 int , c3 int) ;
insert into dtsc_search_data values(1,1,1,1);
insert into dtsc_search_data values(2,1,2,2);
insert into dtsc_search_data values(3,1,1,3);
-- search_value = 2
-- find on c1 column first
select *
from dtsc_search_data
where c1 = 2
-- if c1 is not found then c2 -- get value from here
select *
from dtsc_search_data
where c2 = 2
问题:
我们的解决方案:编写 3 个 SQL 查询,搜索“c1”、“c2”、“c3”,后跟上述条件。我们怎样才能以最低的性能做到这一点?
一个简单的 OR 条件将执行此操作:
SQLFiddle 示例:http ://sqlfiddle.com/#!15/d1ca1/1