Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 28-08-2005, 12.18.54   #1
Thor
Il re di bastoni
Top Poster
 
L'avatar di Thor
 
Registrato: 26-04-2001
Loc.: Milàn
Messaggi: 23.413
Thor promette bene
[MySQL] query complessa

ho due tabelle: VENDITE e PAGAMENTI
ognuna ha un campo id, e P ha anche id_vendita, che si riferisce a vendite.id

dunque il join si fa su vendite.id=pagamenti.id_vendita

Ora, uso un frontend per le query, MySQL Front. Non so se sia un bug di questo, ma una query non mi dà i risultati sperati.

mettiamo io abbia questa situazione:
Codice:
V	P
1
2	2
3
4
5	5
Questo corrisponde a 5 entrate in Vendite e a solo 2 in Pagamenti, occhio. (non esistono entrate null)
Vale a dire per le vendite 1, 3 e 4 NON ci sono pagamenti

Quel che vorrei, se possibile con un unica query, è proprio la tabella finale che vedete su: vale a dire tutte le vendite, con accanto i campi del pagamento se e solo se questo esiste.

Codice:
SELECT vendite.id, pagamenti.id_vendita FROM vendite, pagamenti WHERE vendite.id = pagamenti.id_vendita
UNION
SELECT vendite.id FROM vendite WHERE vendite.id NOT IN (SELECT id_vendita FROM pagamenti)
ORDER BY vendite.id
Questa query non mi produce risultati..
Dato che il mio SQL è un po' arrugginito..trovate errori?
Sapete ottimizzare la query?

Grazie!
___________________________________

Un giorno in cui voleva fare il cattivo, Mister Coniglietto sbirciò oltre la siepe e vide che l'orto del Contadino Fred era pieno di lattuga fresca e verde; Mister Coniglietto, invece, non era pieno di lattuga per niente. E ciò gli parve un'ingiustizia.
Sono un Vampiro! I am a Vampire!
Thor non è collegato   Rispondi citando
Vecchio 28-08-2005, 12.41.06   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
A occhio e croce è dura che funzioni, poichè i due campi select non sono "conformabili", cioè il primo ha due campi, il secondo uno solo (penso che poi, oltre a essere nello stesso numero, debbano anche essere ordinatamente dello stesso tipo).

Senza stare a dannarsi l'anima per risolvere il problema in questo modo, io userei un left outer join, che fa proprio quello che ti serve: prende cioè tutte le tuple nella prima tabella (vendite) ed estende con valori null quelle che non hanno corrispondenti nella seconda (pagamenti) (e tra l'altro ti levi il problema dei duplicati, da evitare o come hai fatto tu, o con un bel distinct).


La sintassi per il left outer join è (a meno che MySql non adotti SQL esotici ):

from TabellaSx S left join TabellaDx D on (S.campoDiJoin = D.campoDiJoin).



Dimmi se funziona eh
Dav82 non è collegato   Rispondi citando
Vecchio 28-08-2005, 12.51.36   #3
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Siccome anche il mio SQL è un po' arruginito, mi avvertono dalla regia (il libro di Ceri ) che in alcune implementazioni di SQL si usa scrivere così:

FROM TabellaSX S, TabellaDx D
WHERE S.CampoDiJoin * = D.CampoDiJoin

(per il right outer join, l'asterisco a occhio va dall'altra parte)
Dav82 non è collegato   Rispondi citando
Vecchio 28-08-2005, 13.22.47   #4
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Toh va, sfaticato!
Dav82 non è collegato   Rispondi citando
Vecchio 28-08-2005, 14.56.50   #5
Thor
Il re di bastoni
Top Poster
 
L'avatar di Thor
 
Registrato: 26-04-2001
Loc.: Milàn
Messaggi: 23.413
Thor promette bene
Quota:
Originariamente inviato da Dav82
io userei un left outer join, che fa proprio quello che ti serve: prende cioè tutte le tuple nella prima tabella (vendite) ed estende con valori null quelle che non hanno corrispondenti nella seconda (pagamenti) (e tra l'altro ti levi il problema dei duplicati, da evitare o come hai fatto tu, o con un bel distinct).


La sintassi per il left outer join è (a meno che MySql non adotti SQL esotici ):

from TabellaSx S left join TabellaDx D on (S.campoDiJoin = D.campoDiJoin).
Good! Mi ero dimenticato del buon vecchio left join!

grazie! (Y)
___________________________________

Un giorno in cui voleva fare il cattivo, Mister Coniglietto sbirciò oltre la siepe e vide che l'orto del Contadino Fred era pieno di lattuga fresca e verde; Mister Coniglietto, invece, non era pieno di lattuga per niente. E ciò gli parve un'ingiustizia.
Sono un Vampiro! I am a Vampire!
Thor non è collegato   Rispondi citando
Vecchio 29-08-2005, 04.34.15   #6
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Figurati
Dav82 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Access 2003: Query dinamica malena_visentin Office suite 8 11-02-2009 15.07.24
[Access 2K] Un aiuto per stampa query usando un report Fat George Office suite 2 11-12-2008 16.02.26
[MYSQL] Problema subquery Redentore Programmazione 4 27-08-2007 09.42.42
Access Query che raggruppa più query? scarmax Office suite 3 31-12-2006 14.53.30
Problema query a campi incrociati ken87 Office suite 0 09-11-2006 18.46.40

Orario GMT +2. Ora sono le: 21.19.33.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.