Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Query impossibile...
giovedì 14 giugno 2012 - 11.01
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gigimac
Profilo
| Newbie
6
messaggi | Data Invio:
gio 14 giu 2012 - 11:01
L'interrogazione che devo eseguire è la seguente:
"Tutte le coppie di acquirenti che hanno comperato un bene dallo stesso venditore e che si sono scambiati almeno un messaggio di posta privata".
Quindi per spiegare meglio la query io devo ottenere come risultato coppie di acquirenti(che sono e_mail) che hanno acquistato dallo stesso venditore; queste coppie devono scambiarsi almeno un messaggio di posta privata inteso in questo senso:
gigi invia un messaggio a Luca e Luca deve rispondere a gigi...questo record deve essere preso una sola volta,quindi se io nel risultato dovessi avere :
gigi | luca
luca | gigi
io devo prendere solo la prima tupla.
Le tavole in questione sono:
DROP TABLE IF EXISTS 'transazione';
CREATE TABLE IF NOT EXISTS `transazione` (
`Id_transazione` VARCHAR(10) NOT NULL,
`RagioneSociale` VARCHAR(30) NOT NULL,
`E_mailAcquirente` VARCHAR(40) NOT NULL,
`DataAcquisto` DATE NOT NULL,
PRIMARY KEY (`Id_transazione`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
DROP TABLE IF EXISTS 'riceve';
CREATE TABLE IF NOT EXISTS `riceve` (
`Acquirente` VARCHAR(40) NOT NULL,
`Messaggio` INT(3) NOT NULL,
PRIMARY KEY (`Acquirente`, `Messaggio`),
INDEX `FK_riceve_messaggio` (`Messaggio`),
CONSTRAINT `FK_riceve_acquirente` FOREIGN KEY (`Acquirente`) REFERENCES `acquirente` (`E_mail`)ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_riceve_messaggio` FOREIGN KEY (`Messaggio`) REFERENCES `messaggio` (`Id_messaggio`)ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
DROP TABLE IF EXISTS 'messaggio';
CREATE TABLE IF NOT EXISTS `messaggio` (
`Id_messaggio` INT(3) NOT NULL AUTO_INCREMENT,
`Oggetto` VARCHAR(30) NOT NULL,
`Testo` VARCHAR(600) NOT NULL,
`Mittente` VARCHAR(40) NOT NULL,
`Timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Id_messaggio`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
Io ho fatto in questo modo:
select distinct *
from (
select t1.E_mailAcquirente as Acquirente1, t2.E_mailAcquirente as Acquirente2
from transazione t1, transazione t2
where t1.E_mailAcquirente <> t2.E_mailAcquirente and t1.RagioneSociale = t2.RagioneSociale
) as n
join
(
select Mittente as Acquirente1, Acquirente as Acquirente2
from messaggio m join riceve r on m.Id_messaggio = r.Messaggio
) as n1
on n.Acquirente1 = n1.Acquirente1
where n.Acquirente2 = n1.Acquirente2
Quindi nella prima select faccio il prodotto cartesiano della tabella transazione e mi seleziono tutte le tuple in cui l'acquirente della prima tabella è divera dall'acquirente della seconda tabella e il venditore della prima tabellaè uguale al venditore della seconda tabella.
Nella seconda select mi faccio il join tra la tabella messaggio e riceve e mi seleziono le coppie di mittente e destinatario e le ridenomino sempre come ho fatto nella prima select in Acquirente1 e Acquirente 2 e poi faccio il join dei due risultati .
Il mio problema adesso è che ottengo come risultato anche le coppie di acquirenti che hanno mandato un messaggio ad un acquirente ma l'acquirente che lo ha ricevuto non risponde al mittente e questo non va bene perche npon deve comparire nella tabella del mio risultato.
Spero che qualcuno di buona volontà mi aiuti
Grazie
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !