Liste mit nur einer SQL Abfrage abklappern
NaN
- datenbank
0 Vinzenz Mai0 NaN0 Vinzenz Mai0 NaN
Die Tabelle 'einheit' : 'id', 'kuerzel' enthält die Einträge:
id kuerzel
1 E
2 F
3 G
4 H
5 I
Folgende Abfrage
SELECT g.schw_als AS schw_als,
g.lei_als AS lei_als,
e.kuerzel AS einheit,
f.bez AS farbe,
k.kpreis
FROM kpreis k, farbe f, einheit e, gruppe g
WHERE ((k.kpreis * g.lei_als) > 75)
AND ((k.kpreis * g.schw_als) < 80)
AND k.farbe = f.id
AND k.einheit = e.id
AND k.gruppe = g.id
möchte ich so erweitern, daß ich nur Ergebnisse, die ein oder mehrere 'kuerzel' enthalten, erhalte. Also nur die Ergebnis mit e.kuerzel in {'F', 'I'} oder nur die Ergebnisse mit e.kuerzel in {'G', 'H', 'I'}.
Mit einer Schleife und mehreren SQL Abfragen (WHERE e.kuerzel='X') kein Problem, geht das aber auch mit nur einer SQL Abfrage?
Datenbank: mysql 5.0.32
NaN
Hallo,
Die Tabelle 'einheit' : 'id', 'kuerzel' enthält die Einträge:
id kuerzel
1 E
2 F
3 G
4 H
5 I
nett - und wo sind Beispieldatensätze der anderen Tabellen?
Folgende Abfrage
SELECT
g.schw_als AS schw_als,
g.lei_als AS lei_als,
e.kuerzel AS einheit,
f.bez AS farbe,
k.kpreis
FROM
kpreis k
INNER JOIN -- explizite Joins machen Abfragen meiner
farbe f -- Meinung nach viel leichter lesbar und
ON -- trennen wunderbar Join-Bedingungen
k.farbe = f.id
INNER JOIN
einheit e
ON
k.einheit = e.id
INNER JOIN
gruppe g
ON
k.gruppe = g.id
WHERE ((k.kpreis * g.lei_als) > 75) -- und einschränkende WHERE-Klausel
AND ((k.kpreis * g.schw_als) < 80)
möchte ich so erweitern, daß ich nur Ergebnisse, die ein oder mehrere 'kuerzel' enthalten, erhalte.
Diesen Satz verstehe ich nicht, wenn ich ...
Also nur die Ergebnis mit e.kuerzel in {'F', 'I'} oder nur die Ergebnisse mit e.kuerzel in {'G', 'H', 'I'}.
... diese Erklärung dazu lese.
Wahrscheinlich kannst Du Dein Ziel erreichen. Subselects oder Selfjoins könnten Dir dabei helfen.
Beispieldaten *aller* Tabellen und das gewünschte Ergebnis, mit der Begründung, warum dies das gewünschte Ergebnis ist, wären hilfreich.
Freundliche Grüße
Vinzenz
Gudn Abend (Ist Mainzelmänchenzeit),
Ich versuche es nochmal.
Die Tabelle 'einheit' : 'id', 'kuerzel' enthält die Einträge:
id kuerzel
1 E
2 F
3 G
4 H
5 I
Sowas
foreach (var array("D", "F", "I")) {
SELECT
kuerzel
FROM
einheit
WHERE kuerzel = var
...
}
würde ich gerne so schreiben
SELECT
kuerzel
FROM
einheit
WHERE kuerzel enthalten in array("D", "F", "I")
...
um nur eine SQL Abfrage zu benötigen; gibt es sowas?
-- explizite Joins machen Abfragen meiner
-- Meinung nach viel leichter lesbar und
-- trennen wunderbar Join-Bedingungen
Ich schreibe die JOINS meist erst implizit und baue sind dann in explizite um (um es der DB zu erleichtern). Ziemlich überflüssige Arbeit, hat wahrscheinlich historisch Ursachen :)
Gruß
NaN
Hallo,
SELECT
kuerzel
FROM
einheit
WHERE kuerzel enthalten in array("D", "F", "I")
...
> um nur eine SQL Abfrage zu benötigen; gibt es sowas?
klar, es gibt den IN-Operator :-) Auf die Idee, dass Du diesen suchst, wäre ich wirklich nicht gekommen.
~~~sql
SELECT
kuerzel
FROM
einheit
WHERE kuerzel [link:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in@title=IN] ('D', 'F', 'I')
Anmerkung: Es ist eine verdammt gute Idee, Zeichenketten in SQL in einfache Anführungszeichen zu setzen. Viele DBMS verstehen nichts anderes.
Freundliche Grüße
Vinzenz
um nur eine SQL Abfrage zu benötigen; gibt es sowas?
klar, es gibt den IN-Operator :-) Auf die Idee, dass Du diesen suchst, wäre ich wirklich nicht gekommen.
Es ist nicht zu glauben, ich hätte nur nach IN suchen müssen. Manchmal sind die Dinge erschütternd einfach :)
Anmerkung: Es ist eine verdammt gute Idee, Zeichenketten in SQL in einfache Anführungszeichen zu setzen. Viele DBMS verstehen nichts anderes.
Danke
NaN