Wie schreibe ich eine ordnungsgemäße If … Else-statement mit JOIN in MySQL?

Ich bin ein ziemlicher Anfänger in MySQL. Ich kenne nur die absolut grundlegenden Aussagen, aber jetzt habe ich time, mich in etwas schwierigere, aber werthaltige Sachen zu stürzen.

Ich habe tatsächlich 3 Tabellen in MySQL, hier ist die Darstellung:

Benutzer:

user_id | name | country --------------------------- 1 | Joseph | US 2 | Kennedy | US 3 | Dale | UK 

Admins:

  admin_id | name | country ---------------------------- 1 | David | UK 2 | Ryan | US 3 | Paul | UK 

Anmerkungen:

 id | n_id | note | comment | country | type | manager ---------------------------------------------------------------- 1 | 3 | This is the 1st note | First | US | admin | 2 2 | 2 | This is the 2nd note | Second | US | user | 1 3 | 2 | This is the 3rd note | Third | UK | user | 2 

Jetzt möchte ich etwas wie dieses SQL ausführen (ich werde hier nicht echte Befehle eingeben, weil ich nicht wirklich mit allen SQL-Ausdrücken vertraut bin):

  IF notes.type = admin THEN SELECT notes.note, notes.comment, notes.country, admins.name, admins.country FROM notes, admins WHERE notes.n_id = admin.admin_id ELSEIF notes.type = 'user' SELECT notes.note, notes.comment, notes.country, users.name, users.country FROM notes, users WHERE notes.n_id = users.user_id 

Ich hoffe, Sie verstehen, was ich hier erreichen möchte. Ich könnte dies leicht mit mehr SQL-statementen tun, aber ich möchte eine Abfrage versuchen, die nicht so viele Ressourcen verwendet.


Bearbeiten 1:

Ich möchte alle Notizen abrufen und herausfinden, welche Benutzergruppe sie eingereicht hat, anstatt den Benutzernamen darauf anzuwenden. Ich meine, wenn der Administrator die Notiz eingereicht hat, sollte SQL die ID aus der Admin-Tabelle auswählen (gemäß dem Typ-Wert), aber wenn ein Benutzer die Notiz abschickt, sollte er den Namen aus der Tabelle Benutzer erhalten.

Das Ergebnis sollte etwa so aussehen:

  result: ------ id | note | comment | country | name -------------------------------------------------------- 1 | This is the 1st note | First | US | Paul 2 | This is the 2nd note | Second | US | Kennedy 3 | This is the 3rd note | Third | UK | Kennedy 

Bearbeiten 2:

Ich habe vergessen zu erwähnen, dass alle diese zu einem Manager aufgelistet werden sollten. Daher sollte eine "Manager-ID" zu den Notizen hinzugefügt werden und alle Notizen aufgelistet werden, bei denen der Manager zum Beispiel ist: 2.

Hier ist eine Methode, die Sie in einer Abfrage ausführen können:

 SELECT n.note, n.comment, n.country, coalesce(a.name, u.name) as name, coalesce(a.country, u.country) as country FROM notes n left join admins a on n.n_id = a.admin_id and n.type = 'admin' left join users u on n.n_id = u.user_id and n.type = 'user'; 

Dies verwendet den left join , um die datasätze aus beiden Tabellen zusammenzuführen. Es wählt dann den passenden datasatz für die select .

Um einen bestimmten Manager auszuwählen, entfernen Sie das Semikolon und fügen Sie Folgendes hinzu:

 where n.manager = 2; 

Wenn Sie Admins und Benutzer in einem Ergebnis erwarten, haben Sie mehrere Möglichkeiten. Der einfachste path ist, eine Union wie folgt auszuwählen:

 SELECT notes.note, notes.comment, notes.country, admins.name, admins.country FROM notes join admins on notes.n_id = admin.admin_id WHERE notes.manager = 2 UNION ALL SELECT notes.note, notes.comment, notes.country, users.name, users.country FROM notes join users on notes.n_id = users.user_id WHERE notes.manager = 2