Ho una tabella di database che registra i movimenti degli utenti in un gioco. Ogni volta che si spostano, registro il loro id utente, il move_index (incrementa ogni riga) e l'id della zona in cui si trovano. Ho uno speciale valore move_index di -1 per indicare l'ultimo movimento di quell'utente.selezionare sui risultati di una selezione
id user_id move_index zone_id
----------------------------------------------------------------
0 11 0 0
1 11 1 0
2 11 2 0
3 11 -1 3
4 22 0 0
5 22 1 1
6 22 2 1
7 22 -1 3
voglio fare due cose con SQL:
- rilevare tutti gli utenti che hanno iniziato e finito in zone specifiche (ad esempio, ha iniziato in zona 0 e finito in zona 3)
- Estendere la sopra, rilevare tutti gli utenti che hanno iniziato e terminato in zone specifiche e hanno attraversato una zona specifica.
So come farlo con più istruzioni SQL & java - ma non so come farlo in una singola istruzione SQL. Devo fare una selezione e poi una selezione sui risultati di questa selezione?
Grazie - l'ho capito da qui. È questo standard SQL (cioè funzionerebbe anche su Oracle?). E, a parte i problemi di rendimento, c'è qualche limite al numero di SQUADRE che puoi fare? – Kevin
@Kevin Le sottoquery si trovano praticamente in ogni RDBMS (non sono sicuro di quale standard fanno parte di ciò che è stato detto). In termini di limiti, dipende in realtà dalla dimensione/forma dei dati, ma in genere cerco di non utilizzare più di una singola sottoquery, se possibile. (In molti casi un semplice [JOIN] (http://dev.mysql.com/doc/refman/5.0/en/join.html), o talvolta un [CASE] (http://dev.mysql.com/ doc/refman/5.0/it/case-statement.html) o una tabella temporanea potrebbe essere più appropriata.) –
Risposta molto chiara e utile. Grazie per avermi fatto risparmiare un sacco di lavoro. – maartenmachiels