2011-09-11 17 views
5

Il mio problema è il seguente:SQL popolamento con i dati distinti e una sequenza

  • ho bisogno di popolare una tabella 'auto' sulla base di informazioni provenienti da casi di affitti delle vetture.
  • Ho bisogno di creare una chiave primaria 'car_id' ma solo per distinte piastre di registrazione nella tabella affitti.
  • Sto creando il car_id con una sequenza.

Ho provato il seguente codice ma ricevere un errore:

--INSERT INTO cars c (c.plate, c.car_id) 
SELECT DISTINCT cr.plate, car_id_seq.nextval 
FROM cars_rentals cr 
; 

Sebbene questo possa funzionare (senza targhe distinte):

--INSERT INTO cars c (c.plate, c.car_id) 
SELECT cr.plate, car_id_seq.nextval 
FROM cars_rentals cr 
; 

(è commentato La riga superiore così posso vedere i valori che sto provando ad emettere immediatamente)

So! Qualcuno sa come posso? A) Ottenere il codice sopra per lavorare con DISTINCT o B) trovare un modo per ottenere MAXVALUE della sequenza come il DISTINCT COUNT delle targhe di registrazione (quindi posso fare due istruzioni di inserimento)

Grazie in anticipo! Jack

+0

Presumibilmente l'errore è stato 'ORA-02287: numero di sequenza non ammessi here'? In genere è meglio dire. –

risposta

10

L'errore è:

ORA-02287: sequence number not allowed here

Ciò risolverlo:

SELECT cr.plate, car_id_seq.nextval 
FROM (SELECT DISTINCT plate FROM cars_rentals) cr 
+1

Tony you legend! Non sapevo che potessi annidare le subquery all'interno della clausola FROM: O: O il mio mondo è stato appena capovolto. Molte grazie! (e sì, quello era l'errore, mi dispiace di averlo omesso) – Bant

+3

Bliney! Vorrei avere questo tipo di reazione al lavoro ;-) –

-1

Prova questo

select cr.plate,max(car_id_seq.nextval) 
from car_rentals cr 
group by cr.plate 
+0

Grazie per il suggerimento ma questo non ha funzionato, ho paura perché non penso che tu possa prendere un valore massimo da una sequenza! cheers tho – Bant

+0

Prova a trasmettere la sequenza come numero intero – Sparky

Problemi correlati