ho una query di selezione che fa un po 'di manipolazione del testo riformattare essenzialmente un campo in modo che io possa cercarlo in un altro tavolo:SQL UPDATE guai in MS Access - l'operazione è necessaria una query aggiornabile
Se la mia prima tavola se ho un campo come "J1/2" cerca l'ID di un record in una tabella diversa con J1 e J2 nei campi appropriati.
Questo funziona tutto bene.
Ora voglio aggiornare la tabella originale, quindi non c'è bisogno di fare ricerche utilizzando più questo manipolazione delle stringhe, ma i miei tentativi di query di aggiornamento terminare con "l'operazione è necessaria una query aggiornabile"
Tutte le idee?
mio SELECT:
SELECT DISTINCT
t1.DD,
t1.TN,
t1.DD & " J" & MID(t1.TN,2,1) AS CalculatedStart,
t1.DD & " J" & MID(t1.TN,4,1) AS CalculatedEnd,
t2.ID
FROM t1 INNER JOIN t2
ON (t1.DD & " J" & MID(t1.TN,2,1)=t2.StartLink)
AND (t1.DD & " J" & MID(t1.TN,4,1)=t2.EndLink)
WHERE t1.TN Like "J?/?"
AND t1.DD Like "M*";
Recall - questo funziona bene e ho la necessaria t2.ID fuori dall'altra parte.
quindi voglio fare qualcosa di simile:
UPDATE t1 SET t2ID = (
SELECT Query1.ID
FROM Query1
WHERE t1.DD=Query1.DD
AND t1.TN=Query1.TN
)
WHERE t1.TN Like "J?/?"
AND t1.DD Like "M*";
Solo questo fallisce. Questo è all'interno di MS Access stesso, quindi non riesco a immaginare un problema di autorizzazioni effettivo come la maggior parte dei problemi di "L'operazione deve utilizzare una query aggiornabile" sembra essere.
MODIFICA: cercare di semplificare il caso che non funziona.
Questa query UPDATE va bene:
UPDATE t1
SET t2ID="Unknown"
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Questo uno non riesce (Grazie Goedke - questo esempio non riesce ovviamente perché la sottoquery restituisce più di 1 risultato avevo semplificato per cercare di trovare il mio problema.)
UPDATE t1
SET t2ID=(SELECT ID FROM t2)
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Così ho sbagliato la sintassi della sottoquery in qualche modo?
EDIT: Questa istruzione SELECT è troppo bella:
SELECT t1.OA, t1.DD, t1.TN, t1.HATRIS,
query1.DD, query1.TN, query1.ID
FROM t1 INNER JOIN query1
ON t1.DD=query1.DD
AND t1.TN=query1.TN
Inoltre, utilizzando conteggio sul istruzione select sopra mostra che non v'è esattamente 1 ID viene restituito al (DD, TN) combinazione
EDIT :
Il caso più semplice che ho ottenuto ora - utilizzando varie istruzioni SELECT ora ho una tabella con solo 2 colonne: la chiave primaria di t1 e il valore che voglio inserire in t1.
io ancora non riesco a scrivere
UPDATE t1 SET t1.f2 = (SELECT t2.f2 FROM t2 WHERE t2.f1 = t1.f1)
dove la chiave primaria del t1 è f1. Anche l'aggiunta di WHERE t1.f1 IN (SELECT f1 FROM t2) non aiuta. (Aggiunto per eliminare la possibilità che la sottoquery restituisca 0 risultati)
Mi spiace per la modifica alla tua domanda: Ho premuto il pulsante di modifica sbagliato:/ – Godeke
BTW, consiglio vivamente SQL Express come back end. Il motivo per cui non ho riscontrato questo problema è che utilizzo sempre un motore SQL sul back-end, non importa quanto piccolo sia il progetto ... Access SQL è apparentemente rotto in questo caso. – Godeke
Jet SQL non è stato interrotto. Jet SQL ha più opzioni per rendere le query aggiornabili rispetto allo standard SQL92. Il mio suggerimento è di provare il predicato DISTINCTROW specifico per Jet. Può spesso forzare una query non aggiornabile per essere aggiornabile. –