Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Aiuto per una join

  1. #1

    Aiuto per una join

    Ciao a tutti,
    vi spiego subito il mio problema...

    io ho una tabella con questi cambi:
    A,B,C
    e una tabella con B,C,D
    devo riuscire a riunire visualizzando
    A,B,C,D di modo che se non esiste collegamento, ovvero se non trovo l'occorrenza T1.B=T2.B and T1.C=T2.C allora D viene visualizzato come 0.00 ... io non ci riesco

    Esempio:

    --- T1 ---
    A B C

    0 B1 C1
    1 B1 C2
    2 B2 C1

    --- T2 ---
    B C D

    B1 C1 1.00
    B1 C2 2.50


    Risultato che volgio ottenere:

    A D
    0 1.00
    1 2.50
    2 0.00

    Si può fare? Io ho provato mille comninazioni ma non ci riesco

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    usa la left join , l'unica cosa è che invece di 0 sul quel campo sql ti dà un null che però facilmente da php tradurrai in 0.

  3. #3

    solo leggermente piu' complessa

    io ho un problema molto simile, quindi evito di aprire un nuovo thread

    La tabella 1 ha campi A B1 B2

    La tabella 2 ha campi D E

    B e C sono dei valori numerici e sono uguali a valori presenti in D, ma sono diversi tra di loro. Il mio scopo e' ottenere da una select con campi A E1 E2

    il caso "bidimensionale" l'ho sempre trattato con una LEFT JOIN in questo modo

    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.B = 2.D

    ma adesso che c'e' un campo in piu'...come posso fare?
    Gabriele B. - http://9thcircle.it

  4. #4
    Originariamente inviato da stabi
    usa la left join , l'unica cosa è che invece di 0 sul quel campo sql ti dà un null che però facilmente da php tradurrai in 0.
    il problema è che se faccio così i conti non tornano... ho 3100 dati di cui 1053 hanno corrispondenza con la tabella T2 ed il resto no, ma se faccio un count(*) della left join il totale è 3192 e non 3100 quindi cìè qualcosa che non va

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    Originariamente inviato da sally3000
    il problema è che se faccio così i conti non tornano... ho 3100 dati di cui 1053 hanno corrispondenza con la tabella T2 ed il resto no, ma se faccio un count(*) della left join il totale è 3192 e non 3100 quindi cìè qualcosa che non va
    evidentemente non hai corrispondenza 1 a 1 su quel campo cioè ti capita che a fronte di un valore del campo sulla 1° tabella hai + di 1 valore sulla 2°.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591

    Re: solo leggermente piu' complessa

    Originariamente inviato da TheClue/Nash
    io ho un problema molto simile, quindi evito di aprire un nuovo thread

    La tabella 1 ha campi A B1 B2

    La tabella 2 ha campi D E

    B e C sono dei valori numerici e sono uguali a valori presenti in D, ma sono diversi tra di loro. Il mio scopo e' ottenere da una select con campi A E1 E2

    il caso "bidimensionale" l'ho sempre trattato con una LEFT JOIN in questo modo

    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.B = 2.D

    ma adesso che c'e' un campo in piu'...come posso fare?
    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON (1.B = 2.D OR 1.C=2.D)

    oppure

    SELECT all 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.B = 2.D
    union all
    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.C=2.D

  7. #7
    Originariamente inviato da stabi
    evidentemente non hai corrispondenza 1 a 1 su quel campo cioè ti capita che a fronte di un valore del campo sulla 1° tabella hai + di 1 valore sulla 2°.
    bhè ma non dovrebbe.... come faccio a scoprirlo se ho 3100 dati?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    non so se funziona ma sulla seconda tabella ..

    select count(*) as conta,campo from tabella
    group by campo
    having conta >1

  9. #9
    è vero... ho trovato l'inghippo

  10. #10

    Re: Re: solo leggermente piu' complessa

    Originariamente inviato da stabi
    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON (1.B = 2.D OR 1.C=2.D)

    oppure

    SELECT all 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.B = 2.D
    union all
    SELECT 1.A, 2.E FROM 1 LEFT JOIN 2 ON 1.C=2.D

    a tentativi ci sono arrivato pochi minuti prima della tua risposta...grazie mille, anyway
    Gabriele B. - http://9thcircle.it

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.