MySql Subquery über 2 Tabellen

Deletemaster

Erfahrenes Mitglied
Hallo zusammen,
ich denke ich hab da nur ein kleines Problem:
Tabelle1 agenturen
agentur_id
agentur_name
Tabelle2 users
user_id
agentur_id
benutzername

Nun möchte ich per Query den Namen der agentur <agentur_name> ausgeben lassen bei welcher der user <<benutzername> registriert ist.
Mein Lösungsansatz sieht so aus:
string str_username = (string)Session["username"]; // hier wird der username dem string übergeben
"Select agentur_name from agenturen WHERE (SELECT agentur_id FROM users WHERE benutzername = '" + str_username + "')";
Leider bringt mir das nicht den Erfolg.
Danke für Eure Hilfe
 
Hi,

Deine WHERE-Klausel ist ja auch unvollständig. Wo ist denn da der Vergleich? Wirft das keinen Fehler?
Wozu überhaupt der Subselect? Das geht doch mit einem ganz simplen JOIN:

SQL:
Select agentur_name from agenturen join users 
   on(agenturen.agentur_id = users.agentur_id) 
   WHERE benutzername = 'Hansel'

LG
 
Zuletzt bearbeitet von einem Moderator:
Hallo Kuddeldaddeldu,
ja so geht's eigentlich logisch ;)
also das heißt:
Beim ausführen auf der Konsole geht's
Im Funktioncode bleibt das Ergebnis allerdings leer?
Code:
    private void agentur_laden()
    {
        string str_username = (string)Session["username"];

        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT agentur_name FROM agenturen JOIN users ON(agenturen.agentur_id = users.agentur_id) WHERE benutzername = '" + str_username + "'"; 
        conn.Open();

        MySqlDataReader reader = cmd.ExecuteReader();

        ddl_Agentur.Items.Clear();

        while (reader.Read())
        {
            ddl_Agentur.Items.Add(reader["agentur_name"].ToString());
        }
        reader.Close();
        conn.Close();

    }
also den usernamen habe ich über die Session der vorherigen Seite übernommen, daß funktioniert auch bei:
Code:
    private void Begruessung()
    {
        string str_login = (string)Session["username"];

        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT anrede, nachname FROM users WHERE benutzername = '" + str_login + "'";
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            lbl_useranrede.Text = reader["anrede"].ToString();
            lbl_Sessionuser.Text = reader["nachname"].ToString();
        }
        reader.Close();
    }
Warum jetzt allerdings kein Ergebnis geliefert wird weiß ich nicht?
 
Hi,

prüf mal Deine Variable str_username, ob die auch gefüllt ist, bzw. lass Dir mal den zusammengesetzten SQL-String ausgeben, wenn's geht (was ist das für eine Sprache? C++?).

LG
 
Hi,


Ich fürchte, dabei kann ich nicht helfen ;)
Aber diese Mysql-Klasse hat doch bestimmt Methoden zur Fehlerbehandlung, bzw. müsstest Du doch prüfen können, ob die Datenbankverbindung steht, der Query fehlgeschlagen ist, etc.

In dem Query-String kann ich jedenfalls keinen Fehler entdecken.

LG
 
Sorry, hab den Fehler gefunden...
Wenn ich eine Funktion schreibe, muss ich sie auch AUFRUFEN
Habe den Debugger benutzen wollen und mich gewundert warum er nicht die die Methode springt...
woher denn auch, wenn sie nicht aufgerufen wird.

Trotzdem vielen Dank für das SQL-Statement
diesesund ähnliche werde ich in meinem Projekt noch öfter benötigen...
 
Halt Stop, gleich die nächste Frage nach einer SQL-Query:
Diesmal möchte ich alle nachnamen aller user ausgeben, die bei derselben agentur arbeiten
also "SELECT nachname FROM users WHERE agentur_id = agentur_id vom benutzername"
ich denke der Ansatz ist richtig?
 

Neue Beiträge

Zurück