
Originariamente inviata da
Savonarola68
Buongiorno a tutti,
con la query di seguito sto estrapolando dei dati, da un DB MySql per la gestione di hardware software ed accessori, per creare un report in pdf, ma il join creato sulle tre tabelle interessate restituisce senza errori i dati principali da "dbpc" e da "hw_software" mentre da "hw_articoli" restituisce il record doppio, in questo caso. Mi spiego: il numero di record restituiti da "hw_articoli" varia al variare dei record di "hw_software". Dopo innumerevoli tentativi mi arrendo dando per assodato che l'errore � nel join, ma non ne vengo fuori. Dove sto sbagliando?
---CODICE--
'SELECT nuc.idnuc, nuc.nuc, nuc.denominazione, hw_articoli.idarticolo, hw_articoli.nucac, hw_articoli.descrizione, hw_articoli.matricola, hw_articoli.idpcac, hw_dbsoftware.idsoftware, hw_dbsoftware.descsoft, hw_dbsoftware.snsoft, hw_dbsoftware.datainstsoft, hw_dbsoftware.idpcsw, idpc, schedapp ' .
'FROM ((servizi.hw_dbpc hw_dbpc
INNER JOIN servizi.hw_articoli hw_articoli
ON ( hw_dbpc.idpc = hw_articoli.idpcac))
INNER JOIN servizi.hw_dbsoftware hw_dbsoftware
ON ( hw_dbpc.idpc = hw_dbsoftware.idpcsw))
INNER JOIN servizi.nuc nuc
ON (nuc.idnuc = hw_articoli.nucac)
AND (nuc.idnuc = hw_articoli.descrizione) '.
'WHERE hw_dbpc.schedapp = %d';
------
Grazie anticipatamente
codice:
SELECT nuc.idnuc,
nuc.nuc,
nuc.denominazione,
hw_articoli.idarticolo,
hw_articoli.nucac,
hw_articoli.descrizione,
hw_articoli.matricola,
hw_articoli.idpcac,
hw_dbsoftware.idsoftware,
hw_dbsoftware.descsoft,
hw_dbsoftware.snsoft,
hw_dbsoftware.datainstsoft,
hw_dbsoftware.idpcsw,
idpc,
schedapp
FROM((servizi.hw_dbpc hw_dbpc
INNER JOIN servizi.hw_articoli hw_articoli
ON (hw_dbpc.idpc = hw_articoli.idpcac))
INNER JOIN servizi.hw_dbsoftware hw_dbsoftware
ON (hw_dbpc.idpc = hw_dbsoftware.idpcsw))
INNER JOIN servizi.nuc nuc
ON (nuc.idnuc = hw_articoli.nucac)
AND (nuc.idnuc = hw_articoli.descrizione)
WHERE hw_dbpc.schedapp = '%d'
Così si legge meglio!
Allora, tu fai un "from" che è una join, cioè prima join poi from, con le parentesi
Secondo me dovrebbe essere
codice:
SELECT nuc.idnuc,
nuc.nuc,
nuc.denominazione,
hw_articoli.idarticolo,
hw_articoli.nucac,
hw_articoli.descrizione,
hw_articoli.matricola,
hw_articoli.idpcac,
hw_dbsoftware.idsoftware,
hw_dbsoftware.descsoft,
hw_dbsoftware.snsoft,
hw_dbsoftware.datainstsoft,
hw_dbsoftware.idpcsw,
idpc,
schedapp
FROM servizi.hw_dbpc as hw_dbpc
INNER JOIN servizi.hw_articoli as hw_articoli
ON hw_dbpc.idpc = hw_articoli.idpcac
INNER JOIN servizi.hw_dbsoftware as hw_dbsoftware
ON hw_dbpc.idpc = hw_dbsoftware.idpcsw
INNER JOIN servizi.nuc as nuc
ON nuc.idnuc = hw_articoli.nucac
AND nuc.idnuc = hw_articoli.descrizione
WHERE hw_dbpc.schedapp = '%d'
Hai delle join multiple sulle stesse tabelle ma su campi diversi o incrociati....perchè?
Credo che la parte di from...join vada rivista ma senza una struttura reale delle tabelle e qualche record di esempio è complicato