Newsgroup: it.comp.software.database
Titolo: scrittura query corretta

Salve a tutti. Sono in difficoltà nella costruzione di una query e chiedo
aiuto a chiunque mi possa aiutare.
Ho una tabella DC2_RIGHECORPODOC e una tabella ART_ARTICOLI.
Nella tabella ART_ARTICOLI ci sono, tra gli altri, i campi ART_PREZZO1,
ART_SCONTO1_1 e ART_SCONTO1_2. Tra le due tabelle non c'è alcuna relazione.
Vorrei estrarre alcuni campi dalla tabella DC2_RIGHECORPODOC, e i tre campi
di cui sopra dalla tabella ART_ARTICOLI.
La query che sto tentando di utilizzare è la seguente:
SELECT DC2_DESCRIZIONE_ART, ART_PREZZO1, DC2_QUANTITA, DC2_ALIQ_IVA,
ART_SCONTO1_1, ART_SCONTO1_2, DC2_MEMO_1, DC2_MEMO_2 FROM DC2_RIGHECORPODOC
WHERE DC2_CODICE_DC1 = 67;
Ovviamente non è corretta, in quanto mi restituisce un messaggio di errore
che dice che non trova il campo ART_PREZZO1.
Se inserisco il nome della seconda tabella dopo la parola chiave FROM, cioè
.... FROM DC2_RIGHECORPODOC, ART_ARTICOLI .....
mi restituisce un numero sbagliato di record:sono tante copie dello stesso
record con il codice 67 (suppongo si chiami "prodotto cartesiano", non è
così?).
La domanda è: come faccio a prendere i campi da due tabelle non correlate
tra loro?
Leggerò con interesse ogni risposta. Grazie a tutti per l'attenzione e Buon
Anno.
PS: se è rilevante, la query fa parte di un blocco di codice VB6 per
connettersi a un database SQLServer.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 connettersi a un database SQLServer.
Il DBMS č sempre rilevane!
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org

Devi mettere le condizioni per entrambe le tabelle ed anche usare alias
per non fare confusione...
SELECT dc2.DC2_DESCRIZIONE_ART, art.ART_PREZZO1
from DC2_RIGHECORPODOC as dc2, ART_ARTICOLI as art
WHERE dc2.DC2_CODICE_DC1 = 67 and art.ID_ARTICOLO = <aa>


Anzitutti grazie per la risposta, e ringrazio qui anche Lorenzo Benaglia.
Si, in effetti mi sono accorto che dovevo specificare una condizione
ulteriore, e che i record restituiti non erano tante copie dello stesso, ma
uno per ogni articolo della tabella degli articoli.
Quindi, ho scritto la query seguente:
SELECT DC2_ARTICOLO_ART, DC2_DESCRIZIONE_ART, ART_PREZZO3, DC2_UNITAMIS,
DC2_QUANTITA, DC2_ALIQ_IVA, ART_SCONTO3_1, ART_SCONTO3_2, DC2_IMPORTONETTO,
DC2_CMERCE, DC2_MEMO_1, DC2_MEMO_2, DC2_MEMO_3, DC2_MEMO_4, DC2_MEMO_5 FROM
DC2_RIGHECORPODOC, ART_ARTICOLI WHERE ((ART_CODICE = DC2_ARTICOLO_ART) AND
(DC2_CODICE_DC1 = 67));
Funziona a modo, esattamente come mi aspettavo. Ma ti ringrazio comunque per
il tuo esempio, che mi ha insegnato una cosa utilissima che non sapevo:
l'utilizzo di un alias anche per i nomi di tabella. Da oggi in poi ne farň
largo uso.
Grazie ancora ad entrambi per l'interessamento, e spero un giorno di poter
ricambiare il favore. Ancora Buon Anno.
PS per Lorenzo: ovviamente c'č una relazione logica tra le due tabelle ma
non ho messo alcuna relazione nel database, nel senso delle relazioni in un
db relazionale.


 uno per ogni articolo della tabella degli articoli.
Infatti ottieni un prodotto scalare dove hai count(DC2_RIGHECORPODOC) *
count(ART_ARTICOLI).
Cmq tieni in considerazione l'osservazione fatta dal bravissimo
Lorenzo. A cosa ti serve un DB relazionale se non metti in relazione i
dati? La pratica ha poco senso e ha un costo computazionale in certi
casi non indifferente.
M.

 un db relazionale.
Specialmente perché le relazioni sono tutta un'altra cosa.

> A cosa ti serve un DB relazionale se non metti in relazione i dati?
Beh, in genere lo faccio ma stavolta ho i miei motivi. Il motivo principale
è che il db mi è stato passato così com'è, non l'ho creato io, è già
funzionante da anni e ignoro la versione con cui è stato originariamente
creato. Anzi, addirittura mi hanno passato gli script SQL già fatti. Per
quanto ne so, può anche essere anteriore all'invenzione dei database
relazionali. Io devo soltanto creare un'interfaccia in VB6.
In ogni caso non ho bisogno di sfruttare l'integrità referenziale, e le
query che scrivo mi servono solo per popolare le form. La reale gestione del
db viene curata da qualcun altro, e quando decideranno di aggiungere le
relazioni me ne accorgerò perché mi avranno mandato degli script SQL
diversi. Io non mi metto a fare una modifica che non mi è stata chiesta.
Comunque le cose che ho imparato dalle vostre risposte vanno a finire nel
mio bagaglio di conoscenza personale, e me ne servirò sicuramente quando
dovrò progettare io il database.
Grazie ancora a tutti, continuerò a lurkare qui dentro.
