sto cercando di evitare di scrivere diverse query SQL per ottenere il seguente scenario:Sqlite - Selezionare o Inserisci e selezionare in una statment
Ho una tabella chiamata Valori:
Valori:
id INT (PK)
data TEXT
Vorrei verificare se esiste un dato nella tabella, se è di ritorno è id, se non esiste, quindi inserirlo e restituire il suo id.
Il (molto) modo semplice sarebbe:
select id from Values where data = "SOME_DATA";
se id non è nullo, grande uso esso. se id è nullo allora:
insert into Values(data) values("SOME_DATA");
e quindi selezionare di nuovo per vedere la sua id o utilizzare l'id restituito.
Sto cercando di rendere la funzionalità di cui sopra in una riga. Credo di essere sempre vicino, ma non ho potuto farlo ancora: Finora ho ottenuto questo:
select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));
sto cercando di approfittare del fatto che il secondo di selezione torneranno nullo e quindi verrà restituito il secondo argomento a COALESCE. Nessun successo finora. Cosa mi manca?
Promemoria, questo è un motore sqlite3! : P
Grazie!
Perché il tag MySQL? –
Ci sono molte somiglianze, forse la risposta verrà dal thread MySQL: P – user1782427
Il comportamento che si desidera è specifico del fornitore. Alcuni fornitori forniscono un modo per restituire i valori inseriti/eliminati dai comandi di inserimento/aggiornamento. Ad esempio, in SQL Server è possibile generare un nuovo ID utilizzando la clausola OUTPUT senza bloccare, mentre MySQL ha il LAST_INSERT_ID per restituire l'ultimo ID auto-generato –