Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581

    [mySQL] query su 3 tabelle (2 pilota)

    Ciao, ho una tabella in cui sono memorizzati dei nominativi, ognuno con un proprio id
    ho poi 2 tabelle che fungono da "pilota" tra i nominativi e determinate aree di gestione; nelle tabelle pilota ci possono essere associati più nominativi alla stesso id_area.
    La struttura è la seguente:

    Tabella "riferimenti"
    id | nome | cognome

    Tabella "anagrafica_area1"
    id_area1 | id_riferimento

    Tabella "anagrafica_area2"
    id_area2 | id_riferimento

    Dovrei recuperare i singoli id, cognome e nome di riferimenti che non sono presenti in nessuna delle tabelle collegate ... è possibile migliorare questa query? (gli id sono forzati perchè tanto prima li ho sempre estratti ... e nel caso specifico dovevo vedere se 1 orfano usciva)

    codice:
    SELECT distinct(id), cognome, nome from riferimenti 
    where NOT EXISTS (
     select anagrafica_area1.id_riferimento from anagrafica_area1 where anagrafica_area1.id_riferimento=riferimenti.id
     union
     select anagrafica_area2.id_riferimento from anagrafica_area2 where anagrafica_area2.id_riferimento=riferimenti.id 
     )
     and id in (30515,46635,47999,48367,48369,48377,48378,48379) order by cognome, nome, id

  2. #2
    Prova così:

    codice:
     SELECT B.* FROM (
     SELECT DISTINCT(ID) AS REF_ID FROM RIFERIMENTI 
     MINUS
     (
      SELECT ANAGRAFICA_AREA1.ID_RIFERIMENTO FROM ANAGRAFICA_AREA1
     UNION
     SELECT ANAGRAFICA_AREA2.ID_RIFERIMENTO FROM ANAGRAFICA_AREA2
     )) A, RIFERIMENTI B
     WHERE A.REF_ID=B.ID

  3. #3
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    intanto grazie mille

    l'ho provata ma mySQL mi dice errore SQL

  4. #4
    Hmmmmmmm, adesso mi ricordo che il comando MINUS non esiste su Mysql.....
    vabbhè, vedi così:

    codice:
     SELECT * FROM 
     (
      SELECT DISTINCT(A.ID) AS REF_ID FROM RIFERIMENTI A LEFT JOIN 
      (
      SELECT ANAGRAFICA_AREA1.ID_RIFERIMENTO ID FROM ANAGRAFICA_AREA1
      UNION
      SELECT ANAGRAFICA_AREA2.ID_RIFERIMENTO ID FROM ANAGRAFICA_AREA2  
      ) B ON A.REF_ID=B.ID AND B.ID IS NULL) X, RIFERIMENTI Z
     WHERE X.REF_ID=Z.ID
    Ciao
    Mik

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.