Visualizza versione completa : [MYSQL] Problema subquery
Redentore
24-08-2007, 10.07.56
Ho un problema con una query inserita in una intranet che sto programmando.
La query è la seguente:
DELETE FROM
contatto a
WHERE
a.codcon IN (
SELECT
b.codcon
FROM
asscon b
WHERE
b.codper=$codper
)
AND (a.tipcon='MP'
OR a.tipcon='CP'
OR a.tipcon='SK'
)
Tale query mi restituisce questo errore:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE
a.codcon IN (
SELECT
b.codcon
FROM
asscon b
WHERE
b.codper=$codper
' at line 3
La versione di mysql è: 4.1.11
Ho già usato le subquery su questo server, e non mi hanno mai dato problemi, ma questa query non riesco proprio a farla funzionare.
Qualcuno può aiutarmi?
Grazie
erdaniele
24-08-2007, 10.53.25
Ho un problema con una query inserita in una intranet che sto programmando.
La query è la seguente:
DELETE FROM
contatto a
WHERE
a.codcon IN (
SELECT
b.codcon
FROM
asscon b
WHERE
b.codper=$codper
)
AND (a.tipcon='MP'
OR a.tipcon='CP'
OR a.tipcon='SK'
)
Tale query mi restituisce questo errore:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE
a.codcon IN (
SELECT
b.codcon
FROM
asscon b
WHERE
b.codper=$codper
' at line 3
La versione di mysql è: 4.1.11
Ho già usato le subquery su questo server, e non mi hanno mai dato problemi, ma questa query non riesco proprio a farla funzionare.
Qualcuno può aiutarmi?
Grazie
prova a riscriverla cosi':
DELETE FROM contatto
WHERE ( ( tipcon='MP'
OR tipcon='CP'
OR tipcon='SK' )
AND ( codcon IN ( SELECT codcon
FROM asscon
WHERE codper=$codper ) )
i riferimenti non sono necessari
OKKIO! pero' alcuni gestori dati non ammettono subquery / join nella istruzione DELETE !
In questo caso dovresti spezzare l'instruzione con la select esterna.
Redentore
24-08-2007, 11.20.59
FUNZIONA!!! :jump: :act:
Grazie mille!
Sapevo che c'era qualche casino con le parentesi, ma da solo non ero riuscito a trovare la soluzione.
Ancora grazie.
LoryOne
24-08-2007, 12.51.11
Cos' non va ?
DELETE FROM contatto
WHERE a.codcon IN (SELECT b.codcon FROM asscon WHERE b.codper=$codper) AND (a.tipcon='MP' OR a.tipcon='CP' OR a.tipcon='SK')
erdaniele
27-08-2007, 09.42.42
Cos' non va ?
DELETE FROM contatto
WHERE a.codcon IN (SELECT b.codcon FROM asscon WHERE b.codper=$codper) AND (a.tipcon='MP' OR a.tipcon='CP' OR a.tipcon='SK')
Dal punto di vista sintattico niente.
E' che so per esperienza che certe implementazioni del' SQL certe volte sono proprio strane.
Alcuni ( per es. DB2 IBM versione < v3.00 ) non vuole subquery nella "DELETE".
Oppure i riferimenti ( a. , b. , ecc. ) superflui possono generare problemi.
I parametri di selezione devono essere per tipo e lunghezza omogenei ai dati di tabella perche' altrimenti le conversioni automatiche generano dei casini immondi.
In alcune vecchie versioni la clausola "IN" se presente deve essere l' ultima: vai a capire perche' !
E' in sostanza un ottimo standard l'SQL ma la portabilita' a tutti i costi sopratutto in passato, secondo me , ha dato qualche problema.
cmq lo standard relazionale e' tutto un altro mondo rispetto ai vecchi modelli gerarchici o reticolari ( ancora in uso purtroppo ) le cui applicazioni spesso diventano comiche !
vBulletin® v3.8.6, Copyright ©2000-2025, Jelsoft Enterprises Ltd.