Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Aiuto JOIN su tabelle

  1. #1
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365

    Aiuto JOIN su tabelle

    Salve mi date una mano x favore, ho queste tabelle:

    codice:
    CREATE TABLE IF NOT EXISTS `setup_lingua` (
      `SETUP_LINGUA_id` bigint(10) NOT NULL AUTO_INCREMENT,
      `SETUP_LINGUA_etichetta` varchar(100) NOT NULL,
      `SETUP_LINGUA_nome` varchar(100) NOT NULL,
      `SETUP_LINGUA_posizione` bigint(20) NOT NULL DEFAULT '0',
      `SETUP_LINGUA_pubblicato` int(1) NOT NULL DEFAULT '0',
      PRIMARY KEY (`SETUP_LINGUA_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
    codice:
    CREATE TABLE IF NOT EXISTS `news` (
      `NEWS_id` bigint(10) NOT NULL AUTO_INCREMENT,
      `SETUP_LINGUA_id` bigint(10) NOT NULL DEFAULT '0',
      `NEWS_titolo` varchar(100) DEFAULT NULL,
      `NEWS_testo` text,
      `NEWS_datatime` datetime DEFAULT NULL,
      `NEWS_pubblicato` int(1) NOT NULL DEFAULT '0',
      `NEWS_posizione` bigint(10) NOT NULL DEFAULT '0',
      PRIMARY KEY (`NEWS_id`,`SETUP_LINGUA_id`),
      KEY `SETUP_LINGUA_id` (`SETUP_LINGUA_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
    
    ALTER TABLE `news`
      ADD CONSTRAINT `news-lingua` FOREIGN KEY (`SETUP_LINGUA_id`) REFERENCES `setup_lingua` (`SETUP_LINGUA_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
    inserisco una news e scelgo la lingua di riferimento;

    ho bisogno di una query che estrae TUTTE le lingue DIVERSE da quelle gia inserite.

    se faccio una query così
    codice:
    SELECT 
      setup_lingua.SETUP_LINGUA_id,
      setup_lingua.SETUP_LINGUA_nome,
      setup_lingua.SETUP_LINGUA_etichetta
    FROM
      news
      INNER JOIN setup_lingua ON (news.SETUP_LINGUA_id = setup_lingua.SETUP_LINGUA_id)
    WHERE
      news.NEWS_id = 'mio id' AND 
      setup_lingua.SETUP_LINGUA_pubblicato
    ORDER BY
      SETUP_LINGUA_posizione
    vengono visualizzate tutte le lingue inserite. ma se al posto di = nella join metto <> non funziona. mi da tutte le lingue di cui due volte quelle mancanti.

    un'aiuto? Grazie

  2. #2
    Usa la Left Join per visualizzare anche le lingue mancanti

  3. #3
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    ci ho provato ma mi stampa tutte le lingue che ho e mi duplica quella che manca

    se ho eng, ita e esp e ho inserito la news in ita e eng, mi stampa eng ita spa spa

    grazie

  4. #4
    Prova a vedere dove il resto dei campi sono nulli.
    Ti faccio un esempio con 2 mie tabelle, ho la tabella piloti e quella nazioni, nella tabella nazioni
    ho una nazione che non viene usata nella tabella piloti, la query che farò avrà:
    codice:
    Select * 
    From nazione na Left Join piloti pi On pi.nazione_id=pi.na_nazione 
    Where nazione_id IS NULL

  5. #5
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    la soluzione del null nn mi sembra percorribile perchè io nn ho nessun campo nulla tabella sulla quale effettuo la query !

  6. #6
    Se la lingua non ha corrispondenza nella tabella non dovrebbe risultare nullo qualche campo? Forse mi sto confondendo io però a me restituisce alcuni campi nulli in quanto non è associata ad altre tabelle :master:

  7. #7
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    Si ma ho provato ma nn va, puoi x favore provare tu sulle mie tabelle?

  8. #8
    Prova a rigirare il problema (o la JOIN ) e a modificare la condizione della JOIN
    codice:
    SELECT 
      setup_lingua.SETUP_LINGUA_id,
      setup_lingua.SETUP_LINGUA_nome,
      setup_lingua.SETUP_LINGUA_etichetta
    FROM
      setup_lingua
      LEFT JOIN news ON (
        news.SETUP_LINGUA_id = setup_lingua.SETUP_LINGUA_id
        AND news.NEWS_id = 'mio id'
        AND setup_lingua.SETUP_LINGUA_pubblicato
      )
    WHERE
      news.NEWS_id IS NULL
    ORDER BY
      SETUP_LINGUA_posizione

  9. #9
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    grazie proverò!

  10. #10
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    funziona, e bravo! grazie1000 ho imparato un'altra cosa!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.