Tabellenverknüpfungen auslesen

Hallo, ich bin wieder da... :D

Ist es möglich den Namen einer bestimmten Tabelle auszugeben?
Denn ich habe 3 Tabellen, eine heisst Lernende, Ausbildner und die andrede heisst Administrator. Ich habe nun aus einer vierten Tabelle die ID ausgelesen und möchte diese ID mit den Spalten Account_ID aus den Tabellen Lernende, Ausbildner und Administrator vergleichen.
Diese ID kann nur in einer der drei Tabellen vorhanden sein.
Somit soll der Name der Tabelle ausgegeben werden welche diese ID beinhaltet.

Ich habe es mit verschiedenene Abfragen versucht, die jedoch nicht funktionierten. Unten habe ich diese noch aufgeführt. Vielleicht kann euch diese Abfrage etwas helfen.

SQL:
/*Hier muss noch irgendwie der Name der Tabelle ausgegeben werden*/
Select * FROM ausbildner AS au, administrator AS ad, lernende AS l
WHERE au.Account_ID = "1"
OR ad.Account_ID = "1"
OR l.Account_ID = "1"

Und hier noch mein andere etwas sinvoller Versuch:
SQL:
/* notenverwaltung ist der Name meiner DB */
show table
FROM notenverwaltung WHERE Account_ID = "1"

Und hier noch eine Idee die ich ohne erfolg hatte
SQL:
show tables FROM notenverwaltung LIKE ausbildner, administrator, lernende WHERE Account_ID = "1"
Wie kann ich das machen?

Gruss Smyle
PS: Ich möchte mich noch für die Hilfe, die ich bisher bekommen habe...und für diese die ich noch bekommen werde.
 
Zuletzt bearbeitet von einem Moderator:
Ich frage mich die ganze Zeit, warum Du nicht eine Personentabelle mit ENUM-Colum TYP hast, aber das hier sollte gehen:

SQL:
Select au.id,'AUSBILDER' AS table_name FROM ausbildner AS au, administrator AS ad, lernende AS l
UNION ALL 
Select ad.id,'ADMIN' AS table_name FROM administrator AS ad, 
UNION ALL
Select l.id,'LERNENDE' AS table_name FROM lernende AS l,

Grüße
gore
 
Zuletzt bearbeitet von einem Moderator:
Hi:D

Kurze Frage:
Ich möchte aus zwei Tabellen einbestimmter inhalt löschen

SQL:
DELET
FROM schulnoten
WHERE EXISTS schulnoten.Semester = '7' 
AND (SELECT noten_lernende.Noten_ID FROM noten_lernende WHERE schulnoten.ID = noten_lernende.Noten_ID) 
AND (SELECT noten_lernende.Lernende_ID FROM noten_lernende WHERE noten_lernende.Lernende_ID = '1')

Aus der Tabelle schulnoten möchte ich folgende Zeilen löschen:
SQL:
ELECT sn.Note FROM `schulnoten` AS sn, noten_lernende AS nl WHERE sn.Semester = '7' AND sn.ID = nl.Noten_ID AND nl.Lernende_ID = '1'
Und danach aus der Tabelle noten_lernende die Zeile mit der zu löschenden ID aus der Tabelle schulnoten.$

Wie muss ich das machen?
Meine obere Abfrage funktioniert nämlich nicht :(
 
Zuletzt bearbeitet von einem Moderator:
SQL:
DELET
FROM schulnoten
WHERE EXISTS schulnoten.Semester = '7' 
AND (SELECT noten_lernende.Noten_ID FROM noten_lernende WHERE schulnoten.ID = noten_lernende.Noten_ID) 
AND (SELECT noten_lernende.Lernende_ID FROM noten_lernende WHERE noten_lernende.Lernende_ID = '1')

Also zunächst einmal erwartet EXISTS ein subselect. AND wiederum erwartet was boole'sches.

versuch doch mal

SQL:
DELETE
FROM schulnoten
WHERE schulnoten.Semester = '7' 
AND EXISTS  (SELECT noten_lernende.Noten_ID FROM noten_lernende WHERE schulnoten.ID = noten_lernende.Noten_ID) 
AND EXISTS  (SELECT noten_lernende.Lernende_ID FROM noten_lernende WHERE noten_lernende.Lernende_ID = '1')

So könnte ein Stiefel daraus werden... wobei ich mich beim zweiten Subselect frage, ob du da nicht noch irgendwas verknüpfen musst...
 
Zuletzt bearbeitet von einem Moderator:
Danke, es hat funktoiniert.

Kann man dieDaten aus zwei verschiedenen Tabellen direkt in einer Abfrage löschen?
Denn ich müsste die Felder die ich aus der noten_lernende heruasgelesen habe auch löschen.
 
Zuletzt bearbeitet:
Da gibt es mehrere Möglichkeiten...

1. Du hast MySQL und ISAM Tabellen. Dann löscht Du halt zu Fuss in zwei Queries.
2. Du hast MySQL und INNO-DB Tabellen. Sofern Du zwischen den beiden Tabellen einen Fremdschlüssel definiert hast, löscht MySQL für Dich automatisch (ON DELETE CASCADE)

ISAM Tabellen solltest Du - meiner Meinung nach - in einem System mit logischen Tabellenbeziehungen generell nicht verwenden. Erst recht nicht, wenn das System unter Last steht.

Bei MySQL kannst Du bei der Tabellendefinition mittels CREATE TABLE FOO AS (...) ENGINE = INNODB; dafür sorgen dass INNODB als storage engine genommen wird. dann kannst Du einen Foreign Key anlegen, der automatisch Detaildatensätze bei Löschung des Elterndatensatzes löscht. siehe hierzu mal MySQL Doku, das hab ich net im Kopf.

Grüße
gore
 
Kurze Frage:
Wenn ich einer Spalte in meiner Tabelle den Typ Float(5) gebe, was bedeutet die 5 in der klammer?
Heisst es das man im gesamten 5 Zeichen haben kann oder sind das die anzahl stellen nach dem komma?
 
Zurück