Pregunta

Dado un campo de base de datos llamado '' widget_ids '', que contiene datos como '' 67/797/124 / '' o " 45 / " ;, donde los números están separados por barras diagonales widget_ids ... ¿cómo haría una declaración de actualización con SQL que diga: " si el widget_ids de la fila con id X contiene el texto " somenumber / " no haga nada, de lo contrario agregue " somenumber / " a su valor actual "

¿Puedes hacer algo así con SQL, o más específicamente, sqlite? ¿Es algo que se hace mejor en el programa por alguna razón o hay soporte para "si-entonces"? como la sintaxis en SQL?

¿Fue útil?

Solución

Las actualizaciones son como los propios if-thens, y también hay algún tipo de soporte if-then en la mayoría de las implementaciones de SQL. Una solución simple podría 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/%";

Otros consejos

Primero, elimine la lista separada por símbolos. Use otra tabla, con una identificación de widget por fila.

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

Rellene la tabla con valores de la lista separada por barras:

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

Ahora puede probar si Thingie 1234 hace referencia al Widget 45:

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

Puede intentar insertar y recuperar si hay un error de clave duplicada:

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 45);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top