AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 124600
Accepted
delatbabel
delatbabel
Asked: 2015-12-27 05:09:11 +0800 CST2015-12-27 05:09:11 +0800 CST 2015-12-27 05:09:11 +0800 CST

Tabela chave/valor com limitadores

  • 772

Tenho certeza que alguém deve ter encontrado isso ou um problema como esse antes, mas não estou encontrando nada em uma pesquisa no Google ou DBA Exchange.

Eu tenho uma tabela armazenando pares chave/valor. Existem também 2 colunas limitantes na tabela, host e ambiente, ambas anuláveis. A maneira como as tabelas de limitação funcionam é que, se houver uma entrada na coluna do host, a chave/valor se aplicará a esse host; da mesma forma, se houver uma entrada na coluna do ambiente, essa entrada terá efeito apenas para esse ambiente. Se uma chave/valor for procurado com um host ou ambiente, os valores limitados prevalecem sobre os valores em que host=NULL ou ambiente=NULL. Além disso, o host tem precedência sobre o ambiente.

Então, como exemplo, aqui estão algumas entradas da tabela:

id      env     host     key    value
1       NULL    NULL     fruit  apple
2       prod    NULL     fruit  banana
3       prod    www      fruit  mango
4       test    NULL     fruit  peach
5       NULL    test     fruit  orange

Dados esses dados de exemplo, o que estou procurando é uma instrução (ou instruções) SQL que retornará esses dados com base nestes critérios:

env     host   key    data returned
NULL    NULL   fruit  1, fruit, apple
prod    NULL   fruit  2, fruit, banana
NULL    www    fruit  3, fruit, mango
junk    junk   fruit  1, fruit, apple  // NULL/NULL values are used as a fallback
junk    www    fruit  1, fruit, apple  // no match, fallback
prod    test   fruit  5, fruit, orange // host=test takes precedence

Isso faz sentido?

Posso dividir a pesquisa em várias seleções, tentar cada uma, verificar se consigo um resultado etc., mas espero conseguir isso da maneira mais eficiente possível.

Idealmente, gostaria que o tipo de pesquisa fosse facilmente extensível se mais limitadores fossem adicionados posteriormente (por exemplo, grupo, namespace, etc).

Alguém?

performance query-performance
  • 1 1 respostas
  • 77 Views

1 respostas

  • Voted
  1. Best Answer
    Andrew Bickerton
    2015-12-28T15:17:49+08:002015-12-28T15:17:49+08:00

    Então você vai passar dois parâmetros opcionais:

    • @hospedeiro
    • @env

    Exemplo sql (para ser colocado em um procedimento armazenado):

    Select top 1 * from dbo.FilterTable ft
    Where 
        ((@host is not null and ft.host = @host) or ft.host is null)
        And ((@env is not null and ft.environment = @env) or ft.environment is null)
    Order by 
        Case
            When ft.host is not null and ft.environment is not null then 1
            When ft.host is not null then 2
            When ft.environment is not null then 3
            Else 4
        End asc
    
    • 1

relate perguntas

  • Existe um ganho de desempenho ao manipular dados com procedimentos armazenados em vez de alimentá-los em funções após a recuperação?

  • Como você ajusta o MySQL para uma carga de trabalho pesada do InnoDB?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve