Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL Spalte in einer Tabelle ergibt über den KEY den Inhalt in der Spalte einer anderen Tabelle

0 views
Skip to first unread message

Maik Koenig

unread,
Jun 17, 2023, 5:38:18 PM6/17/23
to
Moin

Vorab: Ich bin ein SQL-Depp, also Sorry wenn das was offensichtliches
sein sollte.

Ich suche nach einer Möglichkeit den Inhalt einer Spalte in einer
SQL-Tabelle mit Inhalten einer anderen Tabelle zu "verbinden".

Wenn also Tabelle1
id foo
1 3
2 3
3 2

und in Tabelle2
id text
1 Berlin
2 Dortmund
3 Bielefeld

steht, dann soll bei SELECT-Anfragen bei Tabelle1 für "foo" entsprechend
der Antwort der Text aus Tabelle2 kommen, also bei id 1 in Tabelle1 eben
nicht "3" als Antwort kommen sondern eben Bielefeld.

Ja, ich weiss dass ich das mit entsprechenden Abfragen (z.B. per PHP)
selbst verknüpfen kann. Meine Frage ist, ob man das schon in der DB
selbst automatisieren kann. Kann man (z.B. per PHPMyAdmin) in der DB die
Spalten entsprechend verknüpfen? Wenn ja, was ist das Suchwort für die
Suchmaschine meiner Wahl damit ich irgendwo ein HowTo finde? Ich habe
entweder die falschen Suchworte oder es geht gar nicht.

Greetz,
MK
--
Kopp-Verlag-Gläubige, Religionsdeppen, rechte Vollidioten
und ähnlicher Bio-Abfall werden ohne Hinweis ignoriert!
triple-negatives NST - das Leben ist ein Arschloch

Tim Landscheidt

unread,
Jun 17, 2023, 5:49:30 PM6/17/23
to
Maik Koenig <usene...@maikkoenig.de> wrote:

> Vorab: Ich bin ein SQL-Depp, also Sorry wenn das was offensichtliches
> sein sollte.

> Ich suche nach einer Möglichkeit den Inhalt einer Spalte in einer
> SQL-Tabelle mit Inhalten einer anderen Tabelle zu "verbinden".

> Wenn also Tabelle1
> id foo
> 1 3
> 2 3
> 3 2

> und in Tabelle2
> id text
> 1 Berlin
> 2 Dortmund
> 3 Bielefeld

> steht, dann soll bei SELECT-Anfragen bei Tabelle1 für "foo" entsprechend
> der Antwort der Text aus Tabelle2 kommen, also bei id 1 in Tabelle1 eben
> nicht "3" als Antwort kommen sondern eben Bielefeld.

> Ja, ich weiss dass ich das mit entsprechenden Abfragen (z.B. per PHP)
> selbst verknüpfen kann. Meine Frage ist, ob man das schon in der DB
> selbst automatisieren kann. Kann man (z.B. per PHPMyAdmin) in der DB die
> Spalten entsprechend verknüpfen? Wenn ja, was ist das Suchwort für die
> Suchmaschine meiner Wahl damit ich irgendwo ein HowTo finde? Ich habe
> entweder die falschen Suchworte oder es geht gar nicht.

Das Stichwort wäre „JOIN“. In diesem Beispiel müsste (unge-
testet):

| SELECT Tabelle1.id,
| Tabelle2.text
| FROM Tabelle1
| JOIN Tabelle2 ON Tabelle1.foo = Tabelle2.id;

das Gewünschte leisten.

Tim

Maik Koenig

unread,
Jun 17, 2023, 6:23:28 PM6/17/23
to
Am 17.06.2023 um 23:49 schrieb Tim Landscheidt:

> Das Stichwort wäre „JOIN“. In diesem Beispiel müsste (unge-
> testet):
>
> | SELECT Tabelle1.id,
> | Tabelle2.text
> | FROM Tabelle1
> | JOIN Tabelle2 ON Tabelle1.foo = Tabelle2.id;
>
> das Gewünschte leisten.

Wenn ich das richtig verstehe ist das eine Abfrage welche diese
Verbindung für das jeweils gelieferte Ergebnis herstellt, keine
Einstellung in der Datenbank bzw der Spalte selbst. Demnach muss man das
also immer wieder genau so machen, bei jeder Abfrage.

Einen Automatismus der bei "normalen" SELECT-Abfragen schon in der
Datenbank selbst greift gibts nicht?

Peter J. Holzer

unread,
Jun 17, 2023, 7:05:20 PM6/17/23
to
On 2023-06-17 22:15, Maik Koenig <usene...@maikkoenig.de> wrote:
> Am 17.06.2023 um 23:49 schrieb Tim Landscheidt:
>> Das Stichwort wäre „JOIN“. In diesem Beispiel müsste (unge-
>> testet):
>>
>> | SELECT Tabelle1.id,
>> | Tabelle2.text
>> | FROM Tabelle1
>> | JOIN Tabelle2 ON Tabelle1.foo = Tabelle2.id;
>>
>> das Gewünschte leisten.
>
> Wenn ich das richtig verstehe ist das eine Abfrage welche diese
> Verbindung für das jeweils gelieferte Ergebnis herstellt, keine
> Einstellung in der Datenbank bzw der Spalte selbst. Demnach muss man das
> also immer wieder genau so machen, bei jeder Abfrage.

Richtig. Das ist die Idee hinter einer relationalen Datenbank.

Man speichert die Daten in "Relationen" (= Tabellen) weitgehend
unabhängig von den tatsächlichen Abfragen (Siehe Normalformen). Das, was
man dann tatsächlich braucht, kann man in der Abfrage formulieren, ohne
die Datenbank speziell auf die Abfrage optimieren zu müssen.

(Das war damals durchaus eine Innovation. Davor musste man sich sehr
genau überlegen, welche Abfragen man haben wird, und die Daten
entsprechend speichern.)


> Einen Automatismus der bei "normalen" SELECT-Abfragen schon in der
> Datenbank selbst greift gibts nicht?

Es gibt Views. Du kannst einen View definieren:

create view v1 as
select tabelle1.id,
tabelle2.text
from tabelle1
join tabelle2 on tabelle1.foo = tabelle2.id;

Und dann den View wie eine Tabelle verwenden, also z.B.

select * from v1 where text = 'Bielefeld';

Das ist vermutlich am nähesten an dem, was Du dir vorstellst. Der View
wird zum Abfragezeitpunkt ausgewertet, man bekommt also immer die
aktuellen Daten. Das hat aber auch den Nachteil, dass man leicht sehr
komplizierte Views bauen kann und sich dann wundert wieso ein einfaches
Select so langsam ist.

hp

Thomas Hochstein

unread,
Jun 17, 2023, 7:30:03 PM6/17/23
to
Maik Koenig schrieb:

> Ich suche nach einer Möglichkeit den Inhalt einer Spalte in einer
> SQL-Tabelle mit Inhalten einer anderen Tabelle zu "verbinden".

| de.comm.infosystems.www.authoring.misc
| [Webseiten, (X)HTML, CSS und mehr.]
| Die Gruppe dient der Diskussion über das Verfassen von
| Webseiten, insbesondere mittels (X)HTML, CSS und verwandter
| Techniken in Theorie und Praxis. Auch Zugänglichkeit und
| Benutzbarkeit sind Thema der Gruppe. Soweit für eine Frage eine
| thematisch speziellere Gruppe existiert, soll die Frage in
| dieser gestellt werden.

| de.comp.datenbanken.mysql
| [Relationale Datenbanken mit MySQL.]
| Diese Gruppe dient der Diskussion aller das Relationale
| Datenbank-Management-System MySQL betreffenden Fragen. Dabei
| kann auch seine Nutzung zusammen mit anderen Programmen und
| Systemen diskutiert werden, sofern diese nicht von anderen
| Newsgruppen abgedeckt wird.

Maik Koenig

unread,
Jun 17, 2023, 9:14:44 PM6/17/23
to
Am 18.06.2023 um 01:05 schrieb Peter J. Holzer:
> On 2023-06-17 22:15, Maik Koenig <usene...@maikkoenig.de> wrote:
[...]
>> Wenn ich das richtig verstehe ist das eine Abfrage welche diese
>> Verbindung für das jeweils gelieferte Ergebnis herstellt, keine
>> Einstellung in der Datenbank bzw der Spalte selbst. Demnach muss man das
>> also immer wieder genau so machen, bei jeder Abfrage.
>
> Richtig. Das ist die Idee hinter einer relationalen Datenbank.
[...]
> Es gibt Views. Du kannst einen View definieren:

Treffer. Das ist ziemlich genau das was ich wollte, vielen Dank (auch an
Tim Landscheidt!).

@Thomas Hochstein:
Hast ja recht, mein Fehler.
0 new messages