Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129

    Query con Inner Join e Left Outer Join

    Ciao a tutti,
    avrei bisogno di estrarre dal db tutti gli utenti vicini a chi visualizza la pagina, che non siano tra i preferiti dell'utente e sto sclerando con una query, probabilmente complicandomi la vita con giri inutili.

    In particolare non so come fare per chiedere "tutti tranne" su due tabelle diverse.
    Io vorrei, a grandi linee, tutti i record della tabella A, tranne quelli che hanno gli stessi valori nella tabella B.

    La bozza di codice è la seguente che però estrae anche il record che vorrei escludere, quindi non funziona, la posto solo a titolo di esempio per il commento riportato dentro

    codice:
    SELECT * FROM tbl_distanze 
    
    LEFT OUTER JOIN tbl_clg_preferiti 
    ON tbl_distanze.id_utente_b = tbl_clg_preferiti.id_preferito AND tbl_distanze.id_utente = tbl_clg_preferiti.id_user
    //questo è il caso da escludere
    
    WHERE tbl_distanze.id_utente = '1' AND NOW() <= DATE_ADD(tbl_distanze.data, INTERVAL 1 Hour) 
    ORDER BY tbl_distanze.distanza ASC 
    LIMIT 0,20
    C'è un modo più semplice per dire "tutti i record tranne quelli che hanno corrispondenza"?
    Di solito gestisco il caso contrario (tutti quelli che hanno un riscontro) utilizzando LEFT JOIN, ma qui devo estrarre solo quelli che LEFT JOIN escluderebbe...

    Come sono le due tabelle?
    Ci sono due tabelle, una registra le distanze tra gli utenti, l'altra registra i preferiti degli utenti.

    tbl_distanze ha:
    id - numero progressivo che identifica il record
    id_utente - codice dell'utente connesso
    id_utente_b - codice dell'utente confrontato
    data - registra data e ora inserimento record

    tbl_clg_preferiti ha:
    id - numero progressivo che identifica il record
    id_user - codice dell'utente che ha inserito il preferito
    id_preferito - codice dell'utente che è stato aggiunto tra i preferiti
    data - registra data e ora inserimento record

    Grazie mille in anticipo!

    Un saluto,
    Marco

  2. #2
    puoi usare la NOT IN o la NOT EXISTS oppure passare per delle tabelle temporanee. però dovresti dirci quale db stai usando, così possiamo aiutarti meglio (per questo il regolamento lo impone! )

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    grazie mille Optime, perdonami, è l'effetto delle 6 del mattino, in effetti ho dimenticato un particolare non da poco, si tratta di un db MySQL 5.1 su phpMyAdmin 2.11.11.3.

    Quindi suggerisci una soluzione di questo tipo?

    codice:
    SELECT * FROM suppliers 
    WHERE not exists (select * from orders Where suppliers.supplier_id = orders.supplier_id);
    Grazie mille.

    Marco

  4. #4

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 © 2026 vBulletin Solutions, Inc. All rights reserved.