Visualizzazione risultati 1 fino 5 di 5

Discussione: SQL nidificate

  1. #1
    Guest

    Predefinito SQL nidificate

    Ciao a tutti.
    Ho un problema... io devo utilizzare alcune query nidificate cioè ad esempio:
    SELECT * FROM tabella1 WHERE nome <> ALL (SELECT nome FROM tabella2)

    Se non uso questo tipo di query dovrei fare un ciclo con centinaia di query per verificare che il primo nome non sia presente nella seconda tabella.
    Ho cercato vari modi per fare con i JOIN ma non ci riesco

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non dovresti usare NOT IN al posto di <> ALL?
    Lo chiedo perchè è molto che non faccio query serie.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da binarysun
    Non dovresti usare NOT IN al posto di <> ALL?
    Lo chiedo perchè è molto che non faccio query serie.
    E' la stessa cosa in teoria. Cmq non mi funzionano

    query SQL:

    SELECT idu
    FROM utenti
    WHERE idu NOT
    IN (

    SELECT idu
    FROM contatori
    )
    LIMIT 0 , 30

    Messaggio di MySQL:
    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT idu FROM contatori) LIMIT 0, 30' at line 1

  4. #4
    Guest

    Predefinito

    Prova così:

    Codice:
    SELECT utenti.idu
    FROM utenti
    WHERE utenti.idu NOT
    IN (SELECT contatori.idu
    FROM contatori
    )
    LIMIT 0 , 30
    Non sono sicuro che funzioni, ma se mi ricordo bene, MYSQL potrebbe avere problemi con il campo idu, visto che esiste in tutte e due le tabelle, e non può stabilire quale usare se non lo specifichi tu.

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da binarysun
    Non dovresti usare NOT IN al posto di <> ALL?
    Lo chiedo perchè è molto che non faccio query serie.
    Teoricamente se si estraggono molti record nella query nidificata non si dovrebbero ustilizzare nessuna delle due opzioni perché tutte e due fanno un full scan sulla tabella.
    Piuttosto si dovrebbe utilizzare un
    Codice:
    ... not exists (select 1 from tabella2 where campo2=campo1)
    soprattutto se i campi con i quali si fa join sono indicizzati.

    Per quanto riguarda il problema iniziale, visto che ho le stesse perplessità di tonnaer (anche se non ho prvato), prodongo di fare due query separate, e metterle su due array che hanno come chiave il campo nome e poi utilizzare le bellissime funzioni php sulle differenze di array come ad esempio array_diff_key.

    Ciao
    Ultima modifica di golfox : 19-04-2005 alle ore 10.22.03

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •