Select Abfrage WHERE Clausel wenn keine Beziehung besteht ignorieren

  • C#

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Select Abfrage WHERE Clausel wenn keine Beziehung besteht ignorieren

    Hallo Zusammen

    ich habe drei Tabellen tb_kontakt, tb_vorname, tb_name

    tb_kontakt

    SQL-Abfrage

    1. ID int Key
    2. ID_Vorname int NULL
    3. ID_Name int NULL
    4. Telefon VARCHAR NULL
    5. mail VARCHAR NULL


    tb_vorname

    SQL-Abfrage

    1. ID int Key
    2. Vorname VARCHAR NULL


    tn_name

    SQL-Abfrage

    1. ID int Key
    2. Name VARCHAR NULL


    mit

    SQL-Abfrage

    1. SELECT tb_kontakt.ID, Vorname, Name, Telefon, mail
    2. FROM tb_kontakt, tb_vorname, tb_name
    3. WHERE tb_kontakt.ID_vorname=tb_vorname.ID AND tb_kontakt.ID_Name=tb_name.ID


    Nun kann es vorkommen dass ich zum Zeitpunkt des erstellens den Nachnamen eines Kontakts gerade nicht weiss.
    Wie kann ich in dem Fall die Beziehung tb_kontakt.ID_Name=tb_name.ID einfach leer ="" für Name in das DataGrid zurückgeben?

    Gruss und Danke
    Eventuell mit „Case“
    w3schools.com/sql/sql_case.asp
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo mrMo

    Danke für den Hinweis etwas näher bin ich bereits :)
    So erhalte ich mal die korrekte Information.

    SQL-Abfrage

    1. SELECT Vorname, ID_Name,
    2. CASE WHEN ID_Name IS NULL then 'kein Name'
    3. ELSE 'hat Name'
    4. END AS NameText
    5. FROM tb_kontakt, tb_vorname WHERE tb_kontakt.ID_vorname=tb_vorname.ID


    Ich erhalte aber noch nicht den korrekten Nachname da ich natürlich mit der nachstehenden Abfrage alle Namen zurück erhalte. Was muss ich noch anpassen damit der korrekte Nachname zurück kommt?

    SQL-Abfrage

    1. SELECT Vorname, ID_Name,
    2. CASE WHEN ID_Name IS NULL then ''
    3. ELSE (SELECT NAME FROM tb_name, tb_kontakt WHERE tb_kontakt.id_name=tb_name.ID)
    4. END AS NameText
    5. FROM tb_kontakt, tb_vorname, tb_name WHERE tb_kontakt.ID_vorname=tb_vorname.ID


    Gruss und Danke
    Ich habe einen Ansatz gefunden und zwar mit LEFT JOIN. Ich habe noch eine Tabelle ergänzt.

    SQL-Abfrage

    1. SELECT Vorname, NAME, zname, mail, Telefon FROM tb_kontakt
    2. LEFT JOIN tb_name ON tb_kontakt.ID_Name = tb_name.ID
    3. LEFT JOIN tb_zname ON tb_kontakt.ID_zname = tb_zname.ID
    4. JOIN tb_vorname ON tb_kontakt.ID_vorname = tb_vorname.ID


    Führe ich nun den Befehl im Konsolenfenster von MariaDB oder in phpMyAdmin aus geht das wunderbar. Mache ich dies jedoch mit nachstehendem Code so erhalte ich den Fehler:
    "System.NotSupportedException: "Character set 'utf8mb3' is not supported by .Net Framework." Alle Tabellen sind jedoch auf latin1_german2_ci eingestellt

    C#-Quellcode

    1. MySqlConnection conn = new MySqlConnection("Server=localhost;userid=root;password=1234;Database=db_contact;SslMode=none;");
    2. try
    3. {
    4. conn.Open();
    5. MySqlCommand cmd = new MySqlCommand("SELECT Vorname, NAME, zname, mail, Telefon FROM tb_kontakt " +
    6. "LEFT JOIN tb_name ON tb_kontakt.ID_Name = tb_name.ID " +
    7. "LEFT JOIN tb_zname ON tb_kontakt.ID_zname = tb_zname.ID " +
    8. "JOIN tb_vorname ON tb_kontakt.ID_vorname = tb_vorname.ID ", conn);
    9. MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
    10. DataSet ds = new DataSet();
    11. adp.Fill(ds, "LoadDataBinding");
    12. dgv_Location.DataContext = ds;
    13. }
    14. catch (MySqlException ex)
    15. {
    16. MessageBox.Show(ex.ToString());
    17. }
    18. finally
    19. {
    20. conn.Close();
    21. }


    @ Haudruferzappeltnoch in der Tabelle Name sind keine leeren Felder enthalten daher kann das über WHERE nicht gehen. Funktionieren würde es wenn ein Feld leer wäre.

    Gruss und Danke