Visualizzazione dei risultati da 1 a 5 su 5

Discussione: SQL dove sbaglio?

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    26

    SQL dove sbaglio?

    Ciao a tutti!!!
    E' da stamattina che sto sbattendo la testa su questa query:

    SELECT *
    FROM scad_fin s, societa_fin soc, prod_finanziario p, cliente_fin c, finanziaria f, agente a
    WHERE (s.idfinanziaria = f.idfinanziaria)
    AND (s.idcli = c.idcli)
    AND (s.idprodfin = p.idprodfin)
    AND ((s.idsocfin = soc.idsocfin)OR (s.idagente = a.idagente))
    AND (soc.ragionesoc = 'PIPPO')


    mi dovrebbe restituire 3 record... ma ne restituisce 12 (praticamente i tre ripetuti!)

    forse riuscite a trovare un errore???
    praticamente ho un db con le tabelle scad_fin , societa_fin , prod_finanziario, cliente_fin , finanziaria , agente collegate fra loro in base all'id.
    Nel compilare la tabella scad_fin posso scegliere se associare o meno l'idagente o l'idcliente.

    Non riesco a spiegarmi bene...
    Spero mi abbiate capito almeno un pochino!!!
    gRAZIE MILLE

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Ovviamente una join sulle tabelle (in pratica fai una join) con la clausula where ritorna (con lo *) tutti i campi della tabella così creata (tramite le clausole where) quindi, in questo caso, tutti i campi di tutte le tabelle...

  3. #3
    Hai collegato le tabelle tutte con la AND tranne nel caso della doppia scelta.

    Il problema è questo, ti esce il risulta sia se l'id contenuto in s è legato all'id contenuto in soc, sia se l'id contenuto in s è legato ad a.

    In poche parole gli stai dicendo "tirami fuori tutto a patto che trovi qualcosa dentro una o l'altra tabella, stai facendo una raffinazione su per ragione sociale e non per agenti.

    Controlla bene i 12 risultati, sicuramente avranno delle piccola differenze fra loro.

  4. #4
    se ho ben capito nella tabella scad_fin solo uno dei due campi idsocfin e idagente viene compilato; vuoi estrarre i dati delle scadenze relative alla società finanziaria PIPPO e a tutti gli agenti, perciò io la riscriverei unendo due query distinte (attenzione che il numero dei campi deve essere lo stesso)

    SELECT s.idcli, s.idsocfin, s.idagente, soc.idsocfin, soc.ragionesoc, c.idcli
    FROM (scad_fin s INNER JOIN societa_fin soc ON soc.idsocfin = s.idsocfin)
    INNER JOIN cliente_fin c ON c.idcli = s.idcli
    WHERE soc.ragionesoc = 'pippo'
    UNION SELECT s.idcli, s.idsocfin, s.idagente, a.idagente, 'vuoto', c.idcli
    FROM (scad_fin s INNER JOIN agente a ON a.idagente = s.idagente)
    INNER JOIN cliente_fin c ON c.idcli = s.idcli;

    Forse è una "porcata" ma dovrebbe funzionare. Se non funziona magari dopo trovo il tempo di fare due prove.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    26
    Grazie mille a tutti!!!
    ho risolto dividendo le query...so che non è la via ideale...ma avevo fretta per una consegna!!!
    Buona giornata

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