Newsgroup: it.comp.software.database
Titolo: Problemino con query

Salve. Sono abbastanza imbranato con mysql e forse faccio una domanda
stupida, ma vorrei sapere se possibile ottenere un risultato di questo
tipo da una query mysql 4.1
TABELLA a
id int(10) UNSIGNED auto_increment
nome varchar(20)
indirizzo varchar(40)
TABELLA b
id int(10) UNSIGNED auto_increment
ident int(10) UNSIGNED
reparto int(11)
posizione int(11)
Vorrei avere un join fra le due tabelle in modo da ottenere per ogni
b.reparto tutti i a.nome con b.posizione "3" o "1" dove 
a.id
 è = a
b.ident.
Se non mi sono spiegato bene vorrei una cosa di questo tipo:
SELECT a.nome, b.posizione, b.reparto
FROM a
LEFT JOIN b ON test.b.ident = 
a.id
WHERE b.posizione =3
OR b.posizione =1
e questo funziona benissimo, solo che vorrei che per ogni b.reparto ci
fosse un solo risultato in modo che se in uno stesso b.reparto esistono
+ a.nome con b.posizione diverse venga scelto solo quello con
b.posizione = 3 (che ce n'è uno per b.reparto). se invece non c'è
nessuno con b.posizione = 3 allora venga scelto quello con b.posizione
= 1.
Tutto chiaro?
Penso sia una cosa facile, ma non ci arrivo ....
qualche aiutino??
GRAZIE UN MONDO.
Ciao
Marco

 Tutto chiaro?
Vediamo, vuoi selezionare per ogni reparto solo i record con posizione=3 
e se non esiste un record simile per il reparto allora selezionare 
quello con posizione 1
Se la richiesta è questa potresti scrivere una query di questo tipo
A parole :
Seleziona tutti i record con posizione=3
Unisci
Selezione tutti i record con posizione=1 e i cui reparti non sono nella 
selezione precedente
SQL :
SELECT a.nome, b.posizione, b.reparto
FROM a join b on 
a.id
=b.ident
WHERE posizione=3
UNION
SELECT a.nome, b.posizione, b.reparto
FROM a join b on 
a.id
=b.ident
WHERE posizione=1 and b.ident not in (SELECT id
                                       FROM a join b on 
a.id
=b.ident
                                       WHERE posizione=3)
Non l'ho testata prova un po'
ReDiCuori
-- 
-- 
L'uomo non sa perchè si innamora, l'uomo viene travolto e basta
------------------------------­---------------------------
www.giordanoemilio.altervista.org
------------------------------­---------------------------
www.securitygroup.it
Società di servizio che opera nel campo
della sicurezza aziendale
------------------------------­---------------------------
www.pascallike.too.it
http://utenti.lycos.it/pascallike
il sito sulla programmazione pascal
sorgenti, tutorial ed utility
------------------------------­------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------­------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
------------------------------­-------------------------

Ho provato quello che mi hai suggerito ma non ha funzionato. Mi ha
messo però sulla strada giusta e sono arrivato alla soluzione che è:
SELECT a.nome, a.indirizzo, b.reparto, b.posizione
FROM a JOIN b ON 
a.id
 = b.ident
WHERE (
posizione = 1 AND reparto NOT
IN( SELECT reparto FROM b WHERE posizione =3) )
OR posizione =3
Grazie mille per il suggerimento e ciao.
Marco
P.S.
Se vuoi provare posto qui sotto le tabelle di esempio usate per il
test:
CREATE TABLE `a` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nome` varchar(20) NOT NULL default '',
  `indirizzo` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dump dei dati per la tabella `a`
--
INSERT INTO `a` VALUES (1, 'PINCO', 'Palermo');
INSERT INTO `a` VALUES (2, 'MAMMA', 'MIAMI');
INSERT INTO `a` VALUES (3, 'giovanni', 'Salerno');
INSERT INTO `a` VALUES (4, 'Antonio', 'Milano');
INSERT INTO `a` VALUES (5, 'Giovanna', 'Via dei generali');
INSERT INTO `a` VALUES (6, 'Susanna', 'Tutta panna');
-- --------------------------------------------------------
--
-- Struttura della tabella `b`
--
CREATE TABLE `b` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `ident` int(10) unsigned NOT NULL default '0',
  `reparto` int(11) NOT NULL default '0',
  `posizione` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dump dei dati per la tabella `b`
--
INSERT INTO `b` VALUES (1, 3, 4, 1);
INSERT INTO `b` VALUES (2, 2, 5, 1);
INSERT INTO `b` VALUES (3, 1, 3, 1);
INSERT INTO `b` VALUES (4, 4, 3, 3);
INSERT INTO `b` VALUES (5, 6, 3, 5);
INSERT INTO `b` VALUES (6, 2, 4, 3);