5 messaggi dal 27 settembre 2008
Salve ragazzi ho il seguente problema in Sql 2005:
Devo fare un UPDATE di due colonne DATATIME ( gg/mm/aaaa h.mm.ss ) tra due tabella di nome hrdd_000001employee00 e hvba_000001subject03.
Per essere più precisi, i dati che si trovano nella tabella hrdd_000001employee00.dtstartvl devo andare a sovrascrivere i dati in hvba_000001subject03.dtstartvl.
Nella tabella hrdd_000001employee00 sono presenti 608 records mentre nella hvba_000001subject03 ne contiene 260.
Tra le due tabelle c'è solo una colonna univoca di nome IDSUBJECT contenente il nome dei dipendenti. Es. il dipendente AIELLO LUIGI viene codificato nella colonna IDSUBJECT come: AIELUI000001
Nella hrdd_000001employee00 la colonna IDSUBJECT ha molti valori duplicati mentre nella tabella hvba_000001subject03 colonna IDSUBJECT i records sono quelli giusti.
Creando l'update nel seguente modo:

update hvba_000001subject03
set
hvba_000001subject03.DTSTARTVL=(select hrdd_000001employee00.DTSTARTVL FROM hrdd_000001employee00,hvba_000001subject03
where hvba_000001subject03.IDSUBJECT=hrdd_000001employee00.IDSUBJECT)


Sql genera il seguente errore:


Msg 512, Level 16, State 1, Line 1
La subquery ha restituito più di un valore. Ciò non è consentito per subquery che seguono i caratteri =, !=, <, <= , >, >= o utilizzate come espressione.
L'istruzione è stata interrotta.

(0 row(s) affected)

Se ho ben capito, i record che vado a immettere sono in più rispetto a quelli che posso inserire. Come faccio a lanciare un update levando nella tabbella hrdd_000001employee00.IDSUBJECT i valori
che si raddoppiano?
Spero di essere stato chiaro
Grazie in anticipo dell'aiuto

Luca Lauria
Email: lucafirell@libero.it
1.976 messaggi dal 27 luglio 2005
Contributi
salve Luca,
xxBlackEaglexx wrote:
Spero di essere stato chiaro

non tantissimo
puoi per favore ricreare un miniscenario, con due tabelle minimali (e relativi CREATE TABLE) unitamente a qualche riga di INSERT INTO in modo da fare luce sull'insieme, oltre a definire cosa vuoi ottenere.. saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
5 messaggi dal 27 settembre 2008
Cerco di essere più chiaro.
Ho una tabella di nome "A" che ha all'interno due colonne, la prima di nome IDSUBJECT (CHAR) e la seconda DTSTARTVL (DATATIME).
La stessa situazione è presente in una tabella di nome "B".
E' da specificare che nella tabella "B" ho i dati ( solo la colonna DTSTARTVL ) che mi interessano trasferire all'interno della tabella "A".
i record nella tabella "B" sono circa 618, causa di doppioni di nomi contenuti nella colonna IDSUBJECT, mentre nella tabella "A" sono esattamente 260, quelli veritieri.
Da quanto illustrato si può evincere che le tabelle come campo univoco hanno la colonna IDSUBJECT.
quando provo a lancire l' UPDATE come precedentemente illustrato, l'sql genera una anomalia.
La mia domanda è questa:
come devo impostare il comando UPDATE indicando all'interno un comando che mi scarti i record doppioni?
Ho provato con il comando DISTINCT ma non funziona correttamente.
Grazie

Luca Lauria
Email: lucafirell@libero.it
L'errore che ti genera la query che hai scritto è chiaro. Stai provando ad aggiornare un campo con "set = " ma il valore da impostare è + di uno (come hai detto tu nella tabella B possono esserci dei duplicati.

Tu dici che il campo univoco è idsubject ma poi dici anche che ci sono dei doppioni... questo è contraddittorio ma penso di aver capito cosa intendi.

Mi chiedo se è corretto lo schema che ho interpretato:
schema:
tabella A(IDSUBJECT, DTSTARTVL)
tabella b(IDSUBJECT, DTSTARTVL)

dati:
tabella A
1, data1
2, data2
3, data3

tabella B
4, data4
5, data5
6, data6
4, data1
5, data5

E' corretto? oppure se si ripete l'id 4 anche la data corrispettiva è sempre uguale?
Altra domanda: possono essere presenti in A dei record presenti anche in B? Se si, le date possono essere diverse?

Ormai programmano tutti... ma la professionalità appartiene a pochi
5 messaggi dal 27 settembre 2008
Lo schema l'hai interpretato perfettamente.
Si, ci possono essere in A dei record presente anche in B ( solo per il campo IDSUBJECT ) o come tu l'interpreti l'ID. le date sono diverse e raramente coincidono.
Grazie mille per l'aiuto che mi stai dando.
In attesa di un tuo riscontro.
Saluti
Luca

Luca Lauria
Email: lucafirell@libero.it
aspetta, hai risposto solo a una delle domande:

e in B? possono esserci + idsubject con date diverse? o quando si ripetono hanno date uguali?
in caso di date diverse quale devi riportare in A?

Ormai programmano tutti... ma la professionalità appartiene a pochi
5 messaggi dal 27 settembre 2008
Si, in B possono esserci più IDSUBJECT con date diverse. non possono avere date uguali. In caso di date diverse devo portare la più vecchia.
Quella più recente deve essere scartata.

Luca Lauria
Email: lucafirell@libero.it
allora manca questo confronto per la data + vecchia nella tua query:

update hvba_000001subject03
set
hvba_000001subject03.DTSTARTVL=(select MIN(hrdd_000001employee00.DTSTARTVL) FROM hrdd_000001employee00,hvba_000001subject03
where hvba_000001subject03.IDSUBJECT=hrdd_000001employee00.IDSUBJECT)

corretto?

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.