Aus mehreren Feldern eines Datensatzes einzelne Datensät

Aus mehreren Feldern eines Datensatzes einzelne Datensät

am 03.08.2007 18:33:07 von Frank Ehrlacher

Hallo zusammen,

ich habe folgende Struktur in 2 Tabellen

TabelleA
ID A:FeldA A:FeldB A:FeldC
Datensatz 1 1 A1 B1 C1
Datensatz 2 2 A2 B2 C2

TabelleB
ID B:FeldA B:FeldB B:FeldC
Datensatz 1 1 E1 F1 G1
Datensatz 2 2 E2 F2 G2

Ich will jetzt eine Zieltabelle haben, die so aussieht: Wenn A:FeldA einen
gewissen Wert hat (Where-Clause), soll er alle Felder des Datensatzes
mitderselben ID aus "B" in eine neue Tabelle schreiben, also:

Tabelle C
ID C:FeldA
Datensatz 1 1 E1
Datensatz 2 2 F1
Datensatz 3 3 G1

damit ich dann nach "C:FeldA" sortieren kann.

Bisher habe ich das gelöst, in dem ich per PHP-Script mir besagte Tabelle C
für ALLE Datensätze gebastelt habe und die dann mit einem normalen "SELECT
.... WHERE" abgefragt ...

Allerdings wäre eine Lösung direkt im SQL-sicherer
a) eleganter
b) ressourcen-schonender

Ich dachte, "SELECT AS" wäre mein Freund, also

SELECT * AS Neues_Feld from Tabelle_B where (Tabelle_A:FeldA = irgendwas AND
Tabelle_A:ID = Tabelle_B:ID) ORDER BY Neues_Feld.

Nun meine 2 Fragen:
1. Geht es mit MySQL eleganter - wenn ja, wie bzw. mit welchem Ansatz
2. Ist das dann wirklich ressourcenschonder oder ist der Umweg über die
Hilfstabelle "der bessere"?

Danke schon mal!

Frank

Re: Aus mehreren Feldern eines Datensatzes einzelne Datensätze machen

am 05.08.2007 10:26:29 von vean.SE

On 3 Aug., 18:33, "Frank Ehrlacher" wrote:
> Hallo zusammen,
>
> ich habe folgende Struktur in 2 Tabellen
>
> TabelleA
> ID A:FeldA A:FeldB A:FeldC
> Datensatz 1 1 A1 B1 C1
> Datensatz 2 2 A2 B2 C2
>
> TabelleB
> ID B:FeldA B:FeldB B:FeldC
> Datensatz 1 1 E1 F1 G1
> Datensatz 2 2 E2 F2 G2
>
> Ich will jetzt eine Zieltabelle haben, die so aussieht: Wenn A:FeldA einen
> gewissen Wert hat (Where-Clause), soll er alle Felder des Datensatzes
> mitderselben ID aus "B" in eine neue Tabelle schreiben, also:
>
> Tabelle C
> ID C:FeldA
> Datensatz 1 1 E1
> Datensatz 2 2 F1
> Datensatz 3 3 G1
>
> damit ich dann nach "C:FeldA" sortieren kann.
>
> Bisher habe ich das gelöst, in dem ich per PHP-Script mir besagte Tabel=
le C
> für ALLE Datensätze gebastelt habe und die dann mit einem normalen "S=
ELECT
> ... WHERE" abgefragt ...
>
> Allerdings wäre eine Lösung direkt im SQL-sicherer
> a) eleganter
> b) ressourcen-schonender
>
> Ich dachte, "SELECT AS" wäre mein Freund, also
>
> SELECT * AS Neues_Feld from Tabelle_B where (Tabelle_A:FeldA =3D irgendwa=
s AND
> Tabelle_A:ID =3D Tabelle_B:ID) ORDER BY Neues_Feld.
>
> Nun meine 2 Fragen:
> 1. Geht es mit MySQL eleganter - wenn ja, wie bzw. mit welchem Ansatz
> 2. Ist das dann wirklich ressourcenschonder oder ist der Umweg über die
> Hilfstabelle "der bessere"?
>
> Danke schon mal!
>
> Frank

Das sieht irgendwie nach Join aus, was du willst:

SELECT a.id, a.feldA FROM tabelleA a WHERE a.id=3Dtabelleb.id AND ~deine
where clause~;

Das ist ein Inner-Join. Ich habe jetzt nicht ausprobiert ob's klappt.
Ein Link dazu: http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/#in =
ner_join

Re: Aus mehreren Feldern eines Datensatzes einzelne Datensätze machen

am 05.08.2007 13:44:32 von dnoeth

Frank Ehrlacher wrote:

> ich habe folgende Struktur in 2 Tabellen
>
> TabelleA
> ID A:FeldA A:FeldB A:FeldC
> Datensatz 1 1 A1 B1 C1
> Datensatz 2 2 A2 B2 C2
>
> TabelleB
> ID B:FeldA B:FeldB B:FeldC
> Datensatz 1 1 E1 F1 G1
> Datensatz 2 2 E2 F2 G2
>
> Ich will jetzt eine Zieltabelle haben, die so aussieht: Wenn A:FeldA
> einen gewissen Wert hat (Where-Clause), soll er alle Felder des
> Datensatzes mitderselben ID aus "B" in eine neue Tabelle schreiben, also:
>
> Tabelle C
> ID C:FeldA
> Datensatz 1 1 E1
> Datensatz 2 2 F1
> Datensatz 3 3 G1
>
> damit ich dann nach "C:FeldA" sortieren kann.

Die Dinger heissen übrigens Spalten, nicht Felder...

Kannst du erklären, wie du auf dieses Ergebnis kommst?
Willst du die drei Spalten a,b,und c als einzelne Rows?
Das wären UNIONs oder ein Cross-Join mit CASE...
Ist dann übrigens meistens ein Zeichen für ein vermurkstes Datenmodell.

> Ich dachte, "SELECT AS" wäre mein Freund, also
>
> SELECT * AS Neues_Feld from Tabelle_B where (Tabelle_A:FeldA = irgendwas
> AND Tabelle_A:ID = Tabelle_B:ID) ORDER BY Neues_Feld.

Du machst noch nicht solange SQL, oder?

> 1. Geht es mit MySQL eleganter - wenn ja, wie bzw. mit welchem Ansatz
> 2. Ist das dann wirklich ressourcenschonder oder ist der Umweg über die
> Hilfstabelle "der bessere"?

Erklär's nochmal verständlich mit sinnvollen Beispieldaten, am besten
den Original-Daten aus deinen Tabellen.

Dieter