Tabellenspalte über Abfrage bestimmen

querytail

Erfahrenes Mitglied
Hallo zusammen,

ich habe 2 Tabellen, die ich in der Art verknüpfen muss, dass in der einen Tabelle der Name der Spalte steht die in der 2. Tabelle abgerufen werden soll:
Code:
select a.id, a.name from a where (a.(select spaltenname from b where x = y) = "XYZ").


So wie angenommen geht`s leider nicht.

Grüße und Danke

querytail
 
Zuletzt bearbeitet:
MS Access? Oracle?

Zusatzfrage: Ist die Spalte eine beliebige oder eine aus einer Begrenzten Menge?

Nachtrag:
So könnte man es mit MySQL oder Oracle umsetzen wenn es nur um eine begrenzte Anzahl Spalten geht.

Zuerst ein UNION, die alle Spalten untereinander setzt und als neues Fels den Spaltennamen beinhaltet. Anschliessend dieses mit der Spaltenauswahl verknüpfen

SQL:
SELECT
	data_a.id,
	data_a.name
FROM
	(
		SELECT
			id,
			name,
			spalte1 AS wert,
			'spalte1' AS spaltenname
		FROM a
		UNION
		SELECT
			id,
			name,
			spalte2 AS wert,
			'spalte2' AS spaltenname
		FROM a
		UNION
		SELECT
			id,
			name,
			spalte3 AS wert,
			'spalte3' AS spaltenname
		FROM a
	) AS data_a
	INNER JOIN 
	( 
		SELECT spaltenname 
		FROM b 
		WHERE x = y
	) AS data_b
		ON data_b.spaltenname = data_a.spaltenname
WHERE
	data_a.wert = 'XYZ';
 
Zuletzt bearbeitet von einem Moderator:
Verstehe ich das dann richtig, dass in der ersten Klammer jeweils nur ein Wert genommen wird und das beliebig erweitert werden kann? Danke nochmal ******

Viele Grüße

querytail
 
Jepp. Die erste Kalmemr kann mit UNION erweitert werden, so dass alle 5 Spalten ausgelesen werden.

In der ersten Klammer wird aus
Code:
ID | S1 | S2 | S3 | S4 | S5
---|----|----|----|----|---
 1 | 12 |    |    | 15 |
 2 |    | A  | B  | C  | D

das folgende
Code:
ID | WERT | SPALTENNAMEN
---|------|-------------
 1 | 12   | S1
 1 |      | S2
 1 |      | S3
 1 | 15   | S4
 1 |      | S5
 2 |      | S1
 2 | A    | S2
 2 | B    | S3
 2 | C    | S4
 2 | D    | S5

Darauf kann man nachher mit spaltenname und wert ausfiltern
 
Hi Ho,
mal eine Frage... Wenn ich es richtig verstehe hast du 2 Tabellen die miteinander in Beziehung stehen. Wobei die eine vermutlich eine ID als PK und die andere als FK verwendet, ist das soweit richtig verstanden?

Hast Du es dann mal mit einem Join versucht? dürfte von der Ausführugn schneller sein als ein Select im Select.

mfg

Takidoso
 
Er hat in einer Tabelle eine Spalte in der der Name der Spalte der anderen Tabelle steht in der gesucht werden muss. So habe ich das verstanden. Nix mit PK FK etc.

Also etwa so
Code:
Tabelle a:
ID | S1 | S2 | S3 | S4 | S5
---|----|----|----|----|---
 1 | 12 |    |    | 15 |
 2 |    | A  | B  | C  | D

Tabelle b:
ID | spaltename | X
-------------------
 1 | S1         | 1A
 2 | S2         | 1A
 3 | S1         | 1B
 4 | S4         | 1C

Und nun will er zum Beispiel alle Eintràge der Tabelle a, welche in der Spalte X der Tabelle b den Wert Wert '1A' haben und in der Tabelle a in der entsprechenden Spalte ein 'A'.

Also, alle Zeilen mit X = '1A' as Tabelle b: Zeilen 1 und 2.
Also die apaltennamen S1 und S2.

Nun müssen wir in Tabelle a alle Enträge suchen die in Spalte S1 oder S2 den Wert 'A' haben

Gibt in meinem Beispiel natürlich die Zeile mit der ID 2 aus der Tabelle a zurück


Mit JOIN geht das nicht....
 
Hallo ******

Ich möchte sowas auch nutzen, habe aber Probleme, das bei mir umzusetzen. Ich krieg andauernd eine Fehlermeldung in phpmyadin.

Kann mir jeand erklären, wo
Code:
data_a.id,
    data_a.name

abgerufen wird? Ist alles zwischen dem ersten "FROM" und dem letzten "WHERE" nur zur Bestimmung der Spalte? Wenn ich noch mehr Daten (*) benötige, wie kann die Abfrage erweitern? Was bedeutet folgendes?:
Code:
             spalte1 AS wert,
            'spalte1' AS spaltenname

Warum steht das einmal ohne und einmal it Hochkommatas ?

Danke an alle, Gruß tvtotal
 
Item: In Hochkomma ist ein fixer String, ohne Hochkomma der Inhalt der Spalte
Lass einfach mal das kleine Query laufen (natürlich auf deine Namensgebungen etc. angepasst) und du wirst den Unterschied sehen
SQL:
        SELECT
            id,
            name,
            spalte3 AS wert,
            'spalte3' AS spaltenname
        FROM a

Item: Die weiteten gewünschten Spaltennamen müssen in JEDEM Teil des UNION-SubQuery hinzugefügt werden. Erst dann sind sie über data_a.feldname abrufbar
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück