Pergunta

Dado um campo de banco de dados chamado "WIDGET_IDS", que contém dados como "67/797/124 /" ou "45 /", onde os números são barra separados WIDGET_IDS ... como é que você faz uma instrução de atualização com o SQL que dizer: "Se os WIDGET_IDS da linha com id X contém o texto 'someNumber /' não fazer nada, caso contrário acrescentar 'someNumber /' para seu valor atual"

Você pode fazer algo parecido com o SQL, ou mais especificamente, sqlite? É que algo que é melhor feito no programa por algum motivo ou se há suporte para "se-então" como sintaxe SQL?

Foi útil?

Solução

As atualizações são tipo de como eles próprios se-thens, e há também if-then apoiar de alguma sorte na maioria das implementações de SQL. Uma solução simples poderia ser:

update <tablename>
  set widget_id = widget_id + "somenumber/"
  where row_id = X
    and widget_id not like "%/somenumber/%"
    and widget_id not like "somenumber/%";

Outras dicas

Em primeiro lugar, livrar-se da lista separada por símbolo. Use outra mesa, com um ID de widget por linha.

CREATE TABLE ThingieWidgets (
  thingie_id INT REFERENCES Thingies,
  widget_id INT REFERENCES Widgets,
  PRIMARY KEY(thingie_id, widget_id)
);

Preencha a tabela com os valores da lista separada por barra:

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 67), (1234, 797), (1234, 124);

Agora você pode testar se Thingie 1234 referências Widget 45:

SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;

Você pode tentar inserir e recuperar se houver um erro de chave duplicada:

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 45);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top