
64246
11.09.2008, aktualisiert am 18.10.2012
MySQL - Zwei Abfragen in einer?
Hallo,
ich benötige eine Abfrage, die formuliert in zwei Abfragen so wie unten aussehen würde. Sprich selektiere alle Datensätze, deren Wert value1 123 entspricht. Danach suchst Du alle Datensätze, deren value1 dem Ergebniswert der ersten Abfrage entsprechen und zudem Wert value2 = xyz entspricht. Ist eine solche Abfrage möglich?
SELECT wert FROM db WHERE value1 = 123
SELECT id FROM db WHERE value1 = wert AND value2 = xyz
Danke
ich benötige eine Abfrage, die formuliert in zwei Abfragen so wie unten aussehen würde. Sprich selektiere alle Datensätze, deren Wert value1 123 entspricht. Danach suchst Du alle Datensätze, deren value1 dem Ergebniswert der ersten Abfrage entsprechen und zudem Wert value2 = xyz entspricht. Ist eine solche Abfrage möglich?
SELECT wert FROM db WHERE value1 = 123
SELECT id FROM db WHERE value1 = wert AND value2 = xyz
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96724
Url: https://administrator.de/forum/mysql-zwei-abfragen-in-einer-96724.html
Ausgedruckt am: 03.04.2025 um 11:04 Uhr
19 Kommentare
Neuester Kommentar

Moin,
Muss das Zwischenergebnis aus der 1. Abfrage ausgegeben werden und da hinter nochmal die Ergebnisse angezeigt werden, auf die beide Abfragen zutreffen?
Denn sonst wäre das ja IMO einfach
Oder wo habe ich dich falsch verstanden?
Muss das Zwischenergebnis aus der 1. Abfrage ausgegeben werden und da hinter nochmal die Ergebnisse angezeigt werden, auf die beide Abfragen zutreffen?
Denn sonst wäre das ja IMO einfach
SELECT id, wert FROM db WHERE value1 = '123' AND value2 = 'xyz'
Oder wo habe ich dich falsch verstanden?

Moin,
stehen ID+Name und ID+Element+Value alle in einer Tabelle?
Ich würde folgendes Konzept vorschlagen:
Tabelle Namen:
Tabelle Aktionen:
Die Abfrage, wenn der Name gegeben ist und du den Status wissen möchtest:
So solltest du weiterkommen. Die Abfrage ist ungetestet und ich habe bisher noch nicht unter MySQL sondern nur unter Firebird Abfragen erstellt. Vielleicht kann ja jemand der MySQL-Admins dazu mehr sagen?
MfG,
VW
stehen ID+Name und ID+Element+Value alle in einer Tabelle?
Ich würde folgendes Konzept vorschlagen:
Tabelle Namen:
ID | Name |
---|---|
1234 | Broker 221 |
1235 | Broker 222 |
Tabelle Aktionen:
ID | Element | Status |
---|---|---|
1234 | appStatus | canceled |
1235 | appStatus | pending |
Die Abfrage, wenn der Name gegeben ist und du den Status wissen möchtest:
SELECT Namen.Name, Aktionen.Status FROM Namen INNER JOIN Aktionen ON Namen.id = Aktionen.id WHERE Namen.Name = 'gewünschterName'
So solltest du weiterkommen. Die Abfrage ist ungetestet und ich habe bisher noch nicht unter MySQL sondern nur unter Firebird Abfragen erstellt. Vielleicht kann ja jemand der MySQL-Admins dazu mehr sagen?
MfG,
VW

@Dani:
Deshalb habe ich darüber ja mein vorgeschlagenes Tabellen-Konzept angegeben, da durch die (nicht) Formatierung der Tabelle im Beispiel nicht ganz klar war, was wo drin steht.
VW
Deshalb habe ich darüber ja mein vorgeschlagenes Tabellen-Konzept angegeben, da durch die (nicht) Formatierung der Tabelle im Beispiel nicht ganz klar war, was wo drin steht.
VW
Hallo,
ich habe das unter Firebird SQL getestet !
So sieht die Lösung für dein Problem aus:
Hier die Erläuterung.
zuerst habe ich mir eine Tabelle angelegt:
Meine 3.Spalte ist ein Integer bei dir aber ein Char(x) !
dann die Tabelle mit Werten befüllt:
und dann mit dem Script ausgelesen.
Bei Fragen noch mal melden.
ich habe das unter Firebird SQL getestet !
So sieht die Lösung für dein Problem aus:
select * from tabelle b where b.id in
(select a.id from tabelle a where element='broker' and value=221)
and b.element='appStatus'
Hier die Erläuterung.
zuerst habe ich mir eine Tabelle angelegt:
Meine 3.Spalte ist ein Integer bei dir aber ein Char(x) !
CREATE TABLE t_test
(
id integer default NULL,
element Varchar(10) DEFAULT NULL COLLATE PXW_INTL850,
wert integer default Null
);
insert into t_test (id,element,wert) values (1234,'broker',221);
insert into t_test (id,element,wert) values (1234,'appStatus',33);
insert into t_test (id,element,wert) values (1235,'broker',221);
insert into t_test (id,element,wert) values (1235,'test',221);
insert into t_test (id,element,wert) values (1236,'broker',221);
insert into t_test (id,element,wert) values (1236,'appStatus',11);
insert into t_test (id,element,wert) values (1236,'broker',221);
Bei Fragen noch mal melden.
Hallo Dani,
Serverpirat hat es etwas 'speziell' ausgedrückt. D.h. ich habe es auch nicht verstanden.
Die Quintessenz ist nach meinem Verständis:
1. Die Tabelle hat diese Struktur:
id element value
1234 broker 221
1235 broker 221
1234 appStatus canceled
1235 appStatus pending
2.
Ich möchte wissen, welchen wert die Datensätze mit dem element "appStatus"
Das soll nur für Datensätze gelten bei denen das element "broker" den wert 221 hat.
Serverpirat hat es etwas 'speziell' ausgedrückt. D.h. ich habe es auch nicht verstanden.
Die Quintessenz ist nach meinem Verständis:
1. Die Tabelle hat diese Struktur:
id element value
1234 broker 221
1235 broker 221
1234 appStatus canceled
1235 appStatus pending
2.
Ich möchte wissen, welchen wert die Datensätze mit dem element "appStatus"
Das soll nur für Datensätze gelten bei denen das element "broker" den wert 221 hat.

Moin,
nutze doch bitte die Tabellen-Formatierung, dann geht das ganze auch etwas einfacher (steht in der )
Da it-frosch das Insert-Statement aber gepostet hat, bau ich dir die Tabelle einfach mal:
Die Abfrage hat it-frosch ja auch schon gepostet.
VW
nutze doch bitte die Tabellen-Formatierung, dann geht das ganze auch etwas einfacher (steht in der )
Da it-frosch das Insert-Statement aber gepostet hat, bau ich dir die Tabelle einfach mal:
ID | Element | Wert |
---|---|---|
1234 | broker | 221 |
1234 | appStatus | 33 |
1235 | broker | 221 |
1235 | test | 221 |
1236 | broker | 221 |
1236 | appStatus | 11 |
1236 | broker | 221 |
Die Abfrage hat it-frosch ja auch schon gepostet.
VW
Wenn wirklich so das Design aussieht, sollten wir uns mal ernsthaft darüber unterhalten bevor wir das Statment feritg machen. WEnn ich da an die Normalisierung so denke (sowas wie die Bibel in der DB-History), hälst du dich an keines der Gesetze. Ganz ehrlich: Irgendwann bricht dir diese Konstellation das Genick.
Gruss,
Dani
Gruss,
Dani

Spätestens, wenn alle 3 Felder mal gleich sind 
Deshalb finde ich die Verwendung von ID auch rech ... "krumm", da das ja scheinbar kein Primary Key ist.
@normalisierung:
Ausnahmen bestätigen die Regel.
Mal sehen wie lange. 
VW
Deshalb finde ich die Verwendung von ID auch rech ... "krumm", da das ja scheinbar kein Primary Key ist.
@normalisierung:
Ausnahmen bestätigen die Regel.
VW
Hallo serverpirat,
ich kenne die Bibel für DB nicht auswendig aber es sollte schon reichen wenn du eine automatisch vergebene eindeutige ID für jeden in deine Tabelle mit einbaust.
Damit hättest du zuerst einmal ausgeschlossen das irgendwann zwei identische Datensätze entstehen können.
Ansonsten scheint das Script ja geholfen zu haben.
ich kenne die Bibel für DB nicht auswendig aber es sollte schon reichen wenn du eine automatisch vergebene eindeutige ID für jeden in deine Tabelle mit einbaust.
Damit hättest du zuerst einmal ausgeschlossen das irgendwann zwei identische Datensätze entstehen können.
Ansonsten scheint das Script ja geholfen zu haben.

Moin,
die automatische ID dann aber bitte auch zum Primary Key machen, um dopplungen zu vermeiden, wenn jemand in den Datensätzen rummanipuliert.
Ich würde allerdings mit verschiedenen Tabellen, wie ich es hier schonmal dargestellt habe, arbeiten. Das ist allerdings auch nur ein schneller Entwurf, der noch keine Keys usw. beinhaltet.
VW
die automatische ID dann aber bitte auch zum Primary Key machen, um dopplungen zu vermeiden, wenn jemand in den Datensätzen rummanipuliert.
Ich würde allerdings mit verschiedenen Tabellen, wie ich es hier schonmal dargestellt habe, arbeiten. Das ist allerdings auch nur ein schneller Entwurf, der noch keine Keys usw. beinhaltet.
VW
@it-frosch
Wem nützen denn zwei Sätze mit [1234-broker-221] und [1234-broker-110], auch wenn davor noch eine generierte unterschiedliche Auto-Id steht?
Der PK sollte die Kombination aus (jetzt vorhandener) ID und Element sein.
jede dieser Kombinationen kann an einem zeitpunkt ja nur ein Value haben.
Und sinnvoll wäre es, wenn die ID-Daten (1234, 1235...) noch in einer ID-Stammdatentabelle wären genau wie auch die Element-Enumeration.
Mit einer Struktur
- ID (FK mit Referenz auf "ID-Stammtabelle")
- Element (FK mit Referenz auf Elementstammdatentabelle)
- Wert
und einem PK aus ID, Element sollte es sinnvoller sein.
Und ein zusätzliches Feld muss auch nicht angelegt werden.
Grüße
Biber
aber es sollte schon reichen wenn du eine automatisch vergebene eindeutige ID für jeden in deine Tabelle mit einbaust.
Jein... damit hätte er ein formales Ziel (Eindeutigkeit und Identifizierbarkeit eines Datensatzes) zwar erreicht, nicht aber sein (fachliches) Ziel - doppelte Dateninhalte auszuschließen.Wem nützen denn zwei Sätze mit [1234-broker-221] und [1234-broker-110], auch wenn davor noch eine generierte unterschiedliche Auto-Id steht?
Der PK sollte die Kombination aus (jetzt vorhandener) ID und Element sein.
jede dieser Kombinationen kann an einem zeitpunkt ja nur ein Value haben.
Und sinnvoll wäre es, wenn die ID-Daten (1234, 1235...) noch in einer ID-Stammdatentabelle wären genau wie auch die Element-Enumeration.
Mit einer Struktur
- ID (FK mit Referenz auf "ID-Stammtabelle")
- Element (FK mit Referenz auf Elementstammdatentabelle)
- Wert
und einem PK aus ID, Element sollte es sinnvoller sein.
Und ein zusätzliches Feld muss auch nicht angelegt werden.
Grüße
Biber
@Biber
du hast es gründlich gemacht. Ich war zugegebenermaßen zu faul dazu.
Allerdings habe ich Serverpirat so verstanden das eine "ID" schon mehrfach das Element "broker" mit unterschiedlichen "Values" haben könnte.
Ein schönes WE noch
IT-Frosch
du hast es gründlich gemacht. Ich war zugegebenermaßen zu faul dazu.
Allerdings habe ich Serverpirat so verstanden das eine "ID" schon mehrfach das Element "broker" mit unterschiedlichen "Values" haben könnte.
Ein schönes WE noch
IT-Frosch