Togliere doppioni nella where

di AlbertoL il
11 risposte

Ciao a tutti.

vorrei togliere i doppioni nella where di questa query

per semplificarla

SELECT * FROM Tbase

WHERE 
R =1 AND IdProdotto =5 OR 
R =2 AND IdCliente = Criterio1() OR 
R =3 AND IdCliente = Criterio1() AND IdProdotto =5 OR 
R =4 AND IdCliente = Criterio1() AND IdProdotto =5 AND IdFornitore = Criterio2() 
grazie

11 Risposte

  • 13/09/2024 - AlbertoL ha scritto:

    Criterio1() OR 
    R =3 AND IdCliente = Criterio1() AND IdProdotto =5 OR 
    R =4 AND IdCliente = Criterio1() AND IdProdotto =5 AND IdFornitore = Criterio2() 

    Cosa sono Criterio1() e Criterio2(). Sono funzioni?

    Dove sono i doppioni nella where? non ho capito.

  • 13/09/2024 - Philcattivocarattere ha scritto:

    Cosa sono Criterio1() e Criterio2(). Sono funzioni?

    Ovviamente si.

    Dove sono i doppioni nella where? non ho capito.

    Forse secondo AlbertoL questa parte dei criteri contiene ridondanze…? 

    Secondo me non è così sono criteri separati e non raggruppabili.
    Peccato che mancando le parentesi si possa fraintendere la priorità AND/OR:

    R =2 AND IdCliente = Criterio1() OR 
    R =3 AND IdCliente = Criterio1() AND IdProdotto =5 OR 
    R =4 AND IdCliente = Criterio1() AND IdProdotto =5 AND IdFornitore = Criterio2() 

    Sarebbe meglio scriverlo così sempre sia la suddivisione corretta.

    (R =1 AND IdProdotto =5) OR 
    (R =2 AND IdCliente = Criterio1()) OR 
    (R =3 AND IdCliente = Criterio1() AND IdProdotto =5) OR 
    (R =4 AND IdCliente = Criterio1() AND IdProdotto =5 AND IdFornitore = Criterio2())
  • Grazie a tutti

  • Se Criterio1() e Criterio2() sono funzioni, non vanno indicati in quel modo. Per il resto non ho capito la domanda.

  • 13/09/2024 - Antony73 ha scritto:


    Se Criterio1() e Criterio2() sono funzioni, non vanno indicati in quel modo. Per il resto non ho capito la domanda.

    grazie per la risposta

    come si usano nella query le funzioni?

    Per il resto non ho capito la domanda….

    intendevo questo: cioè eliminare dove possibile : IdCliente = Criterio1() e IdProdotto =5

        " WHERE R =1 And IdProdotto =5" & _
       " OR R =4 AND IdProdotto =5 AND IdCliente = Criterio1() AND IdFornitore = Criterio2()" & _
       " OR R =2 AND(IdCliente = Criterio1())" & _
       " OR R =3 AND IdCliente = Criterio1() AND IdProdotto =5"

  • Nel senso che vuoi eliminare i record che soddisfano la condizione where?

  • 14/09/2024 - sihsandrea ha scritto:


    Nel senso che vuoi eliminare i record che soddisfano la condizione where?

    Ciao e grazie per la risposta

    no, semplicemente performare la query.

    Dove possibile ridurre i passaggi lasciando invariato il risultato.

  • Ah, certo!

    Ecco quella funzione che fa quella cosa con questo e quel campo di quello e quell'altro valore mettile al posto di quelle…

  • A: IdCliente = Criterio1() 

    B: IdProdotto =5 

    (R =1 AND B) 

    OR 

    (R =2 AND A)

    OR 

    (R =3 AND A AND B) 

    OR 

    (R =4 AND A AND B AND IdFornitore = Criterio2())

    Non mi sembra si possa ridurre.

  • Grazie

Devi accedere o registrarti per scrivere nel forum
11 risposte