Campo de actualización de SQLite si contiene
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?
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);