Campo di aggiornamento SQLite se contiene
Domanda
Dato un campo di database chiamato " widget_ids " ;, contenente dati come " 67/797/124 / " o " 45 / " ;, in cui i numeri sono separati da widget_ids ... come si farebbe una dichiarazione di aggiornamento con SQL che direbbe: "se i widget_ids della riga con ID X contengono il testo " somenumber / " non fare nulla, altrimenti aggiungi " somenumber / " al suo valore corrente "
Puoi fare qualcosa del genere con SQL, o più precisamente, sqlite? È qualcosa che è meglio fatto nel programma per qualche motivo o c'è supporto per "if-then"? come la sintassi in SQL?
Soluzione
Gli aggiornamenti sono un po 'come if-thens stessi, e c'è anche un supporto if-then di qualche tipo nella maggior parte delle implementazioni SQL. Una soluzione semplice potrebbe essere:
update <tablename>
set widget_id = widget_id + "somenumber/"
where row_id = X
and widget_id not like "%/somenumber/%"
and widget_id not like "somenumber/%";
Altri suggerimenti
Innanzitutto, elimina l'elenco separato da simboli. Usa un'altra tabella, con un ID widget per riga.
CREATE TABLE ThingieWidgets (
thingie_id INT REFERENCES Thingies,
widget_id INT REFERENCES Widgets,
PRIMARY KEY(thingie_id, widget_id)
);
Riempi la tabella con i valori dell'elenco separato da barra:
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 67), (1234, 797), (1234, 124);
Ora puoi verificare se Thingie 1234 fa riferimento al Widget 45:
SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;
Puoi provare a inserire e ripristinare se c'è un errore chiave duplicato:
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 45);