Ho una tabella da aggiornare utilizzando i record di un'altra tabella e sto facendo questo per portare le informazioni da un sistema (database) a un altro. Lo scenario è complesso po ', ma ho un disperato bisogno di aiuto :-s
QUERY INTERNO SQL restituisce più di un valore in una query UPDATE
Ci sono 3 tavoli - component
, scan
e stage_link
componenti
component_id stage_id
------------ --------
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
scansione
scan_id component_id scanner_id date_scanned
------- ------------ ---------- -----------------------
1 1 scanner_a 2012-01-01 07:25:15.125
2 1 scanner_b 2012-01-02 08:14:05.456
3 2 scanner_a 2012-01-01 12:05:45.465
4 3 scanner_a 2012-01-01 19:45:12.536
5 1 scanner_c 2012-01-03 23:33:54.243
6 2 scanner_b 2012-01-02 11:59:12.545
stage_link
stage_link_id scanner_id stage_id
------- ---------- ----------
1 scanner_a 1
2 scanner_b 1
3 scanner_c 2
4 scanner_d 2
5 scanner_e 2
6 scanner_f 3
ho bisogno di update
tavolo component
e set
il campo stage_id
secondo l'ultimo scansione. Ogni scansione porta il componente in una fase in base allo scanner coinvolto. Ho scritto la seguente query per update
la tabella component
, ma genera un errore che dice;
Subquery returned more than 1 value. This is not permitted when the subquery follows '='
La query è;
UPDATE component
SET stage_id = (select stage_id
from(
select scn.scanner_id, sl.stage_id
from scan scn
INNER JOIN stage_link sl ON scn.scanner_id = sl.scanner_id
where scn.date_scanned = ( select temp_a.max_date
from ( SELECT x.component_id, MAX(x.date_scanned) as max_date
FROM scan x
where component_id = x.component_id
GROUP BY x.component_id
) as temp_a
where component_id = temp_a.component_id)
) as temp_b
)
Sto lavorando su MS SQL Server
e voglia di risolvere la questione senza usare PHP
o qualsiasi altra lingua.
Ho provato per un giorno a fare questo lavoro, ma ancora non ho avuto modo di farlo funzionare. Qualsiasi aiuto sarebbe molto apprezzato!
Grazie mille in anticipo :-)
Grazie mille per questo suggerimento !! è stato di grande aiuto !! Questo è esattamente quello che volevo !!! Sorriso grazie mille ancora !!!!! – mithilatw
@mithilatw: prego. Si noti che potrebbero esserci 2 problemi con questa query (per riferimento futuro): (1) Questo presuppone che data_scanning sia sempre univoca. Se 2 scanner eseguono la scansione contemporaneamente (fino alla parte del nanosecondo), quindi il comando "SELECT component_id, scanner_id' restituirà 2 valori. (2) I campi nel join 'Temp2.scanner_id = SL.scanner_id' sono colonne basate su char, quindi se si hanno molti scanner_ids, questa query potrebbe iniziare a rallentare. – Kash