Descrição:
Estamos usando o PostgreSQL 9.3 - Centos 6 x64 . Temos uma tabela dtsc_search_data conforme abaixo:
dtsc_search_data
id ---- c1 ---- c2 ---- c3
1 ---- 1 ---- 1 ---- 1
2 ---- 1 ---- 2 ---- 2
3 ---- 1 ---- 1 ---- 3
Queremos pesquisar nas colunas "c1, c2, c3" na tabela dtsc_search_data com condições: se search_value for encontrado em "c1", então retorne ; se valor_pesquisa não for encontrado em "c1" então encontre em "c2", se valor_pesquisa for encontrado em "c2" então retorne ; caso contrário, retorne (c3).
Exemplo:
search_value = 1 => "c1" = 1 => just search on "c1"
search value = 2 => "c1" != 2, "c2" = 2 => just search on "c2".
search_value = 3 => "c3"
CÓDIGO (atualização)
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
Pergunta:
Nossa solução: escreva 3 pesquisas SQL em "c1", "c2", "c3" seguidas pelas condições acima. Como podemos fazer isso com o menor desempenho?
Uma simples condição OR fará isso:
Exemplo SQLFiddle: http://sqlfiddle.com/#!15/d1ca1/1