Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [MySQL] Right/Left Join

    Non ho capito come MySQl gestisca le join right e left.

    Faccio un esempio semplicerrimo:

    Tabella 1
    campoA=1 campoB=2


    Tabella 2
    campoC=3 campoD=4

    Se metto in join la tabella1 e la tabella2 con una sintassi del genere:

    select * from tabella1 t1
    inner join tabella2 t2
    on t1.campoA = t2.campoC
    where t1.campoB = 2

    non dovrei ottenere alcun record.

    Se la query però diventasse:
    select * from tabella1 t1
    left join tabella2 t2
    on t1.campoA = t2.campoC
    where t1.campoB = 2

    Dovrei ottenere il record della tabella1, anche se la condizione di join non è soddisfatta.

    MySQL, a quanto pare, non ragiona così.
    Sbaglio qualcosa o l'SQL di MySQL non è standard?
    Mi aspetterei comportamenti molto simili se non uguali a quelli di Oracle, visto che il produttore è il medesimo.

  2. #2
    bhe oracle ha comprato mysql.. il codice era già fatto
    quindi il comportamento non deve per forza essere uguale..

    cmq il comportamento che dovrebbe avere è quello che hai descritto:
    http://database.html.it/guide/lezion...so-delle-join/

  3. #3
    Originariamente inviato da galavott
    bhe oracle ha comprato mysql.. il codice era già fatto
    quindi il comportamento non deve per forza essere uguale..

    cmq il comportamento che dovrebbe avere è quello che hai descritto:
    http://database.html.it/guide/lezion...so-delle-join/
    In effetti è il comportamento che mi aspetto.
    Mi confermi che non c'è bisogno di relazioni tra le due tabelle in join, come ad esempio una foreign key?

  4. #4
    le chiavi esterne servono solo a legare i record in fase di insert/delete/update

  5. #5
    Originariamente inviato da IcarusDream
    In effetti è il comportamento che mi aspetto.
    Mi confermi che non c'è bisogno di relazioni tra le due tabelle in join, come ad esempio una foreign key?
    mi pare abigua la richiesta. La foreign key serve come indicato da galavot, la relazione tra i campi delle due tabelle e' indispensabile se vuoi fare una join, non una chiave ma un contenuto, in altre parole i due campi delle due tabelle devono avere lo stesso contenuto.

    inner join equivale ad una equi-join cioe' solo i campi equivalenti, left/right join invece rende tutti i record left/right presenti nella tabella indicata e NULL nella tabella in join che non ha corrispondenza. Ovviamente senza un where rendera' tutti i record della tabella left/right

    Da tener presente che i risultati della join sono in AND con la richiesta del where. Quindi la tua query con left join ti rende 1 record. non capisco quale problema hai indicato nel comportamento di mysql.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.