Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221

    [MySql] Subquery con più risultati

    Qualcuno mi può aiutare a capire dove sto sbaliando?

    in un DB mysql ho due tabelle:

    Gruppi

    id, nomegruppo

    OperatoriGruppi

    id, idOperatore, idGruppo

    ogni operatore puo appartenere a diversi gruppi, io voglio estrarre tutti i gruppi tranne quelli di cui fa parte un preciso operatore, per cui ho impostato la query in questo modo:

    SELECT * FROM Gruppi WHERE id != ANY (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)

    la query viene eseguita correttamente ma mi da come risultato tutti i gruppi, senza escludere quelli in cui è inserito l'opertore 1;

    ma la cosa più assurda, che proprio non capisco, è che se cambio la query in:

    SELECT * FROM Gruppi WHERE id = ANY (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)

    ovvero sostituisco 'id!=' con 'id=' la query si comporta esattamnte come mi aspetterei, ovvero mi da tutti i gruppi di cui fa parte l'operatore 1.

    come faccio a fare il contrario??

    grazie a tutti per l'aiuto


  2. #2
    Cosi va?

    SELECT * FROM Gruppi WHERE id NOT IN (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)
    Ciao!

  3. #3
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Originariamente inviato da fmortara
    Cosi va?

    SELECT * FROM Gruppi WHERE id NOT IN (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)
    Grazie mille, così è Perfetta!!!

    Giusto per curiosità, mi sai dire come mai con '!=' se ne frega del controllo mentre con '=' va tutto liscio?

    Ripeto, giusto per curisità, tanto con 'NOT IN' come mi hai suggerito tu funzione a meraviglia.

    Grazie mille


  4. #4
    Credo... non sono sicuro:

    SELECT * FROM Gruppi WHERE id != ANY (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)

    significa:

    -- seleziona i gruppi dove l'id del gruppo è diverso da almeno uno de gruppi dell'operatore 1

    ma se l'operatore 1 appartiene a più gruppi questi vengono estratti entrambi, prova la tua query con un operatore che ha un solo gruppo.

    Forse andava:


    SELECT * FROM Gruppi WHERE id != ALL (SELECT idGruppo FROM OperatoriGruppi WHERE idOperatore = 1)

    La clausola "NOT IN" equivale a "<> ALL" o "!= ALL".


    Ciao!

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    ho fatto un po di prove, giusto per capire il meccanismo, ed è esattamente come dici tu, infatti con un utente che ha un solo gruppo basta anche il semplice '!=' mentre per gestire anche gli utenti con più gruppi bisogna usare 'NOT IN' oppure '!= ALL' o '<> ALL'.

    Grazie ancora per l'aiuto.


  6. #6
    prego... ti passo l'iban...



    Ciao!

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.