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?

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top