• Moderatore

    select mysql articolate

    Salve,

    non tutti mi conoscete ma spesso e volentieri mi ritrovo in situazioni alquanto complesse se non c'è un no stop! bhè oggi mi affiderò io a voi 😛

    ho bisogno che una select mi stampi alcuni nomi eliminandone altri già presenti in un'altra tabella:

    mi spiegherò meglio..

    ho una tabella così composta:

    Nome tabella persone
    colonna(unica) elenco (qui dentro ci sono solo nomi di persone)

    e l'altra composta:

    Nome tabella richieste
    colonna(1) richiedente(qui dentro ci sono solo nomi di persone)
    colonna(2) invitante(qui dentro ci sono solo nomi di persone)

    ora la mia query dovrebbe stamparmi solo e soltanto i nomi presenti in "persone" escludendo i nomi che sono presenti in "richiedente" ed "invitante"

    quindi:

    se io avessi

    tabella persone

    tizio
    caio
    sempronio

    e nella tabella richieste

    tizio|caio

    la query dovrebbe stamparmi solo sempronio.

    spero abbiate capito e che mi sappiate aiutare io stò ancora sclerando 😞


  • User Attivo

    Prova così:

    SELECT persone.elenco FROM persone, richieste WHERE persone.elenco NOT IN (richieste.richiedente, richieste.invitante);

    Ciao!


  • Moderatore

    nn dà errori ma non mi stampa nulla 😄


  • User Attivo

    Strano, ho fatto un test con Tizio, Caio e Sempronio ma funziona bene 😄

    Ciao!


  • Moderatore

    mi posti il codice utilizzato da te? magari sono io che erro 😐

    non si sà mai 😄


  • User Attivo

    Io ho creato il database a mano, senza script.
    Questo è il dump file:

    
    -- SQL Dump
    -- 
    -- Host: localhost
    -- Generato il: 21 Ott, 2007 at 10:35 PM
    -- Versione MySQL: 5.0.27
    -- 
    -- Database: `test`
    -- 
    CREATE DATABASE `test` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
    USE `test`;
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `persone`
    -- 
    
    CREATE TABLE `persone` (
      `elenco` varchar(20) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- 
    -- Dump dei dati per la tabella `persone`
    -- 
    
    INSERT INTO `persone` (`elenco`) VALUES 
    ('tizio'),
    ('tizio'),
    ('caio'),
    ('sempronio'),
    ('caio');
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `richieste`
    -- 
    
    CREATE TABLE `richieste` (
      `richiedente` varchar(20) NOT NULL,
      `invitante` varchar(20) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- 
    -- Dump dei dati per la tabella `richieste`
    -- 
    
    INSERT INTO `richieste` (`richiedente`, `invitante`) VALUES 
    ('tizio', 'caio'),
    ('caio', 'tizio');
    
    

    Ovviamente la query di interrogazione è quella postata precedentemente.
    Buon divertimento 😛

    Ciao!


  • Moderatore

    [php]
    SELECT elenco FROM persone
    WHERE persone.elenco NOT IN (SELECT DISTINCT richiedente FROM richieste)
    AND persone.elenco NOT IN (SELECT DISTINCT invitante FROM richieste);
    [/php]

    non so a te ma a me così funge 😛


  • User Attivo

    Ha me funziona anche nell'altro modo. Mistero! 😄


  • User Attivo

    @Sups said:

    Ha me funziona anche nell'altro modo. Mistero! 😄
    Sicuro che l'altro modo sia SQL standard?