Discussione:
Query di eliminazione
(troppo vecchio per rispondere)
Knuves
2004-02-01 14:53:18 UTC
Permalink
Un saluto a tutti.
Devo eliminare dei record da una tab ma la selezione dei record da
cancellare devo farla sulla tab correlata.
Struttura della mia query:

DELETE T_Codice.COD_1, T_Descrizione.DESCRIZIONE_BREVE
FROM T_Descrizione LEFT JOIN T_Codice ON T_Descrizione.COD_A =
T_Codice.COD_A
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));

Ho provato a togliere dall'istruzione DELETE il riferimento al secondo campo
"T_Descrizione.DESCRIZIONE_BREVE", in quanto non voglio che venga eliminato
ma la query non funziona

Visualizza i dati, ma quando provo ad eseguirla ho questo msg: "Specificare
la tabella contenente i record da eliminare."

Sapete dirmi dove sbaglio?
Grazie.
Roberto da casa
2004-02-01 15:27:49 UTC
Permalink
Post by Knuves
Un saluto a tutti.
Devo eliminare dei record da una tab ma la selezione dei record da
cancellare devo farla sulla tab correlata.
DELETE T_Codice.COD_1, T_Descrizione.DESCRIZIONE_BREVE
FROM T_Descrizione LEFT JOIN T_Codice ON T_Descrizione.COD_A =
T_Codice.COD_A
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
Ho provato a togliere dall'istruzione DELETE il riferimento al secondo campo
"T_Descrizione.DESCRIZIONE_BREVE", in quanto non voglio che venga eliminato
ma la query non funziona
"Specificare
Post by Knuves
la tabella contenente i record da eliminare."
Mi sembra giusto che Access ti dia questo messaggio: secondo te come pensi
che farebbe a sapere da quale delle due tabelle vuoi eliminare i record
visto che nella DELETE indichi sia un campo della prima che un campo della
seconda tabella?

E se modifichi la query così:

DELETE T_Codice.COD_1
FROM T_Descrizione LEFT JOIN T_Codice ON T_Descrizione.COD_A =
T_Codice.COD_A
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));


cosa succede?
Post by Knuves
Sapete dirmi dove sbaglio?
Grazie.
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Alessandro Cara
2004-02-01 16:56:38 UTC
Permalink
Post by Knuves
Post by Knuves
Un saluto a tutti.
Devo eliminare dei record da una tab ma la selezione dei record da
cancellare devo farla sulla tab correlata.
DELETE T_Codice.COD_1, T_Descrizione.DESCRIZIONE_BREVE
FROM T_Descrizione LEFT JOIN T_Codice ON T_Descrizione.COD_A =
T_Codice.COD_A
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
Ho provato a togliere dall'istruzione DELETE il riferimento al secondo
campo
Post by Knuves
"T_Descrizione.DESCRIZIONE_BREVE", in quanto non voglio che venga
eliminato
Post by Knuves
ma la query non funziona
"Specificare
Post by Knuves
la tabella contenente i record da eliminare."
Mi sembra giusto che Access ti dia questo messaggio: secondo te come pensi
che farebbe a sapere da quale delle due tabelle vuoi eliminare i record
visto che nella DELETE indichi sia un campo della prima che un campo della
seconda tabella?
DELETE T_Codice.COD_1
FROM T_Descrizione LEFT JOIN T_Codice ON T_Descrizione.COD_A =
T_Codice.COD_A
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
cosa succede?
beh, Roberto io il campo sulla delete non ce lo metterei proprio, non mi
risulta che la "delete" cancelli "campi". A occhio di delete ne dovrebbe fare 2
(da come la vedo *pippo* e *pluto* devono essere contenute nella stessa
descrizione, non sara' un OR?)

cmq ho i miei dubbi che funzioni.
Se mette su l'integrita' referenziale su COD_A con:

DELETE
FROM T_Descrizione
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" ----->Or<------
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));

gli dovrebbe andare 'ome una spada

--
a.cara
Togli qualcosa dall'email
Roberto da casa
2004-02-01 17:21:54 UTC
Permalink
"Alessandro Cara" <***@blunet.it> ha scritto nel messaggio news:***@blunet.it...
[CUT]
Post by Alessandro Cara
beh, Roberto io il campo sulla delete non ce lo metterei proprio, non mi
risulta che la "delete" cancelli "campi". A occhio di delete ne dovrebbe fare 2
(da come la vedo *pippo* e *pluto* devono essere contenute nella stessa
descrizione, non sara' un OR?)
cmq ho i miei dubbi che funzioni.
DELETE
FROM T_Descrizione
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" ----->Or<------
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
gli dovrebbe andare 'ome una spada
OK per l'OR al posto dell'AND, ma mi sembra di aver capito che Knuves vuole
cancellare i record dalla tabella T_Codice e non dalla tabella
T_Descrizione, insomma vuole cancellare i record della tabella T_Codice
correlati ai record della tabella T_Descrizione che abbiano una certa
descrizione; se così fosse il tuo codice SQL non va bene.
Post by Alessandro Cara
--
a.cara
Togli qualcosa dall'email
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Alessandro Cara
2004-02-01 18:36:13 UTC
Permalink
Roberto da casa wrote:
[cut]
Post by Roberto da casa
OK per l'OR al posto dell'AND, ma mi sembra di aver capito che Knuves vuole
cancellare i record dalla tabella T_Codice e non dalla tabella
T_Descrizione, insomma vuole cancellare i record della tabella T_Codice
correlati ai record della tabella T_Descrizione che abbiano una certa
descrizione; se così fosse il tuo codice SQL non va bene.
non ho proprio guardato quello che vuole (visto che e' in ottime mani) . Ho solo
visto la delete e poiche' ogni volta che vedo citati i campi mi scatta il
riflesso condizionato sono intervenuto.

P.S. se e' cosi' allora non capisco proprio perche' deve fare LEFT JOIN. Io
penso che li voglia cancellare da tutte e due le tabelle ;<)



--
a.cara
Togli qualcosa dall'email
Knives
2004-02-02 06:35:37 UTC
Permalink
:))) siete troppo divertenti!! Grazie
cmq scusate, forse dovevo essere + preciso.
Il LEFT JOIN c'è xkè ho una relazione di tipo generico "mostra tutti i
record della tab T_Descrizione e solo i record della T_Codice in cui i campi
correlati sono uguali" (non c'è integrità referenziale).
L'"AND" c'è xchè la query mi deve restituire solo i campi che contengono sia
"pluto" che "pippo".
Ho già provato il tuo consiglio Roberto, ho cancellato il campo dalla riga
delete ma non funziona, mi da sempre lo stesso avviso.
Grazie 1000
Roberto da casa
2004-02-02 09:37:27 UTC
Permalink
Post by Knives
:))) siete troppo divertenti!! Grazie
cmq scusate, forse dovevo essere + preciso.
Il LEFT JOIN c'è xkè ho una relazione di tipo generico "mostra tutti i
record della tab T_Descrizione e solo i record della T_Codice in cui i campi
correlati sono uguali" (non c'è integrità referenziale).
L'"AND" c'è xchè la query mi deve restituire solo i campi che contengono sia
"pluto" che "pippo".
Scusa ma non esisterà nessun record che contenga nel campo DESCRIZIONE_BREVE
contemporaneamente sia il valore "pluto" che il valore "pippo" (AND), ma in
un campo ci può essere solo un valore e tu vuoi selezionare solo i record il
cui valore è uguale a "pluto" o (OR) a "pippo".
Post by Knives
Ho già provato il tuo consiglio Roberto, ho cancellato il campo dalla riga
delete ma non funziona, mi da sempre lo stesso avviso.
Ma hai lasciato l'operatore AND o lo hai sostituito con OR?
Post by Knives
Grazie 1000
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Knives
2004-02-02 14:14:12 UTC
Permalink
Grazie ancora per la tua attenzione!
Cmq preciso ulteriormente:
Il campo in cui la query cerca pippo e pluto è una stringa di testo, e solo
se contiene queste due parole può dare luogo alla eliminazione del record
correlato, non in altri casi (ad es solo pippo o solo pluto) pertanto
l'operatore AND non lo posso cambiare (credo).
Infatti nella condizione di where, prima e dopo le parole, ho messo gli
asterischi:
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
Non è la prima volta che uso query di eliminazione, ma l'ho fatto sempre
usando una sola tabella, è la prima volta che lo faccio usando 2 tabelle
correlate. Di conseguenza ho pensato che sia proprio questo il problema. Non
sarà un limite della funzione DELETE? mah!?

Ciao e buona giornata.
Antonio Biso
2004-02-02 14:58:29 UTC
Permalink
Post by Knives
Grazie ancora per la tua attenzione!
E perchè non precisi lasciando parte del quoting scrivendo quindi DOPO, così
magari si capisce qualcosa?!?!!

Antonio
Roberto da casa
2004-02-02 16:04:33 UTC
Permalink
Post by Knives
Grazie ancora per la tua attenzione!
Il campo in cui la query cerca pippo e pluto è una stringa di testo, e solo
se contiene queste due parole può dare luogo alla eliminazione del record
correlato, non in altri casi (ad es solo pippo o solo pluto) pertanto
l'operatore AND non lo posso cambiare (credo).
Infatti nella condizione di where, prima e dopo le parole, ho messo gli
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
Non è la prima volta che uso query di eliminazione, ma l'ho fatto sempre
usando una sola tabella, è la prima volta che lo faccio usando 2 tabelle
correlate. Di conseguenza ho pensato che sia proprio questo il problema. Non
sarà un limite della funzione DELETE? mah!?
Una cosa è sicura: in una query di cancellazione deve essere espresso in
maniera univoca uale sia il nome della tabella da cui vuoi cancellare i
record, e dai tuoi ragionementi mi sembra di capire che vuoi cancellarli
dalla tabella T_Codice, ma Access non può ascoltare i tuoi ragionamenti e se
nella FROM indichi il nome di due tabelle giustamente Access non può
immaginare da quale delle due vuoi cancellare i record e quindi è giusto che
ti domandi da quale.

Chiarito il problema degli operatori AND ed OR, se vuoi cancellare dalla
tabella T_Codice i record nel cui record correlato della tabella
T_Descrizione nel campo DESCRIZIONE_BREVE contengono sia la stringa "pippo"
che la stringa "pluto".
Se i campi COD_A sono di tipo Testo.

Prova con una query di cancellazione che abbia il seguente codice SQL:

DELETE T_Codice.*, DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A =
'" & [COD_A] & "'") AS Espr1
FROM T_Codice
WHERE (((DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A = '" &
[COD_A] & "'")) Like "*pippo*" And (DLookUp("[DESCRIZIONE_BREVE]",
"T_Descrizione", "COD_A = '" & [COD_A] & "'")) Like "*pluto*"));

Se invece i campi COD_A sono di tipo Contatore/Numerico, allora prova con il
seguente codice SQL:

DELETE T_Codice.*, DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A =
" & [COD_A]) AS Espr1
FROM T_Codice
WHERE (((DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A = " &
[COD_A])) Like "*pippo*" And (DLookUp("[DESCRIZIONE_BREVE]",
"T_Descrizione", "COD_A = " & [COD_A])) Like "*pluto*"));
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Post by Knives
Ciao e buona giornata.
Alessandro Cara
2004-02-02 16:15:19 UTC
Permalink
Post by Knives
Grazie ancora per la tua attenzione!
Il campo in cui la query cerca pippo e pluto è una stringa di testo, e solo
se contiene queste due parole può dare luogo alla eliminazione del record
correlato, non in altri casi (ad es solo pippo o solo pluto) pertanto
l'operatore AND non lo posso cambiare (credo).
Infatti nella condizione di where, prima e dopo le parole, ho messo gli
WHERE (((T_Descrizione.DESCRIZIONE_BREVE) Like "*pippo*" And
(T_Descrizione.DESCRIZIONE_BREVE) Like "*pluto*"));
Non è la prima volta che uso query di eliminazione, ma l'ho fatto sempre
usando una sola tabella, è la prima volta che lo faccio usando 2 tabelle
correlate. Di conseguenza ho pensato che sia proprio questo il problema. Non
sarà un limite della funzione DELETE? mah!?
Ciao e buona giornata.
delete from t_codice
where cod_a in (select cod_a from t_descrizione
where descrizione_breve like '*pippo*' and descrizione_breve like '*pluto*')

--
a.cara
Togli qualcosa dall'email
Knives
2004-02-02 19:24:31 UTC
Permalink
Post by Roberto da casa
DELETE T_Codice.*, DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A
=
Post by Roberto da casa
'" & [COD_A] & "'") AS Espr1
FROM T_Codice
WHERE (((DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A = '" &
[COD_A] & "'")) Like "*pippo*" And (DLookUp("[DESCRIZIONE_BREVE]",
"T_Descrizione", "COD_A = '" & [COD_A] & "'")) Like "*pluto*"));
delete from t_codice
where cod_a in (select cod_a from t_descrizione
where descrizione_breve like '*pippo*' and descrizione_breve like '*pluto*')
ma quando eseguo la query resta un pò in attesa e poi mi restituisce 0
record. accade in entrambi i casi!
Non so proprio che pensare, dato che non ho molta esperienza su access.
cmq grazie ancora e bserata.
Alessandro Cara
2004-02-03 09:21:42 UTC
Permalink
Post by Alessandro Cara
Post by Roberto da casa
DELETE T_Codice.*, DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A
=
Post by Roberto da casa
'" & [COD_A] & "'") AS Espr1
FROM T_Codice
WHERE (((DLookUp("[DESCRIZIONE_BREVE]", "T_Descrizione", "COD_A = '" &
[COD_A] & "'")) Like "*pippo*" And (DLookUp("[DESCRIZIONE_BREVE]",
"T_Descrizione", "COD_A = '" & [COD_A] & "'")) Like "*pluto*"));
delete from t_codice
where cod_a in (select cod_a from t_descrizione
where descrizione_breve like '*pippo*' and descrizione_breve like
'*pluto*')
ma quando eseguo la query resta un pò in attesa e poi mi restituisce 0
record. accade in entrambi i casi!
Non so proprio che pensare, dato che non ho molta esperienza su access.
cmq grazie ancora e bserata.
select cod_a from t_descrizione
where descrizione_breve like '*pippo*' and descrizione_breve like
'*pluto*'
prova solo questa. Se non ti restituisce alcun codice significa che non hai
record che abbiano contemporaneamente nella descrizione breve il valore 'pippo'
e 'pluto'

'i plutocrati si spippolano i poveri paperini'
con una descrizione siffatta la query dovrebbe (deve) funzionare

P.S. Access non ci entra nulla questa (non quella di Roberto, visto che usa la
dlookup) e' semplice sql. Va bene per qualsiasi dbms.

--
a.cara
Togli qualcosa dall'email

Continua a leggere su narkive:
Loading...