mysql: Alle Datensätze mit gemeinsamem Wert?

L

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.178
Reaktionspunkte
4
Hallo zusammen

Sorry, bin mysql Anfänger, vielleicht kann jemand helfen...

idstatus
12
12
14
22
22
21

Ich versuche alle id's zu erfragen, bei denen ALLE status-Werte 2 oder 4 sind.
In meinem Beispiele müsste es also die id 1 ausgeben, da bei dieser alle status-Werte entweder 2 oder 4 sind.

Kann jemand helfen?

Danke und Gruss

Léo
 
select id where status in(„2“,“4“)

mit den Anführundszeichen musst Du probieren.
 
SQL:
SELECT DISTINCT ‘id‘ FROM table WHERE ‘status‘ IN (2,4);

Gibt auch die ID nur einmalig zurück, wenn sie, wie hier, mehrfach vergeben sein kann.
Eine ID sollte allerdings nur einmal vorhanden sein.

Tip: auf die „status“-Spalte einen normalen Index legen, wenn die Tabelle groß wird. Bei Tabellen < 500 Zeilen lohnt das hingegen nicht.
 
  • Gefällt mir
Reaktionen: Difool, wegus und RD11
Da merkt man, dass ich schon ein paar Jahre raus bin 😋🧐
 
  • Wow
Reaktionen: JARVIS1187
Es ist nie zu spät, wieder damit anzufangen 😜
 
  • Gefällt mir
Reaktionen: wegus und RD11
wenigstens jt die Richtung gestimmt
 
SQL:
SELECT DISTINCT ‘id‘ FROM table WHERE ‘status‘ IN (2,4);

Gibt auch die ID nur einmalig zurück, wenn sie, wie hier, mehrfach vergeben sein kann.
Eine ID sollte allerdings nur einmal vorhanden sein.

Tip: auf die „status“-Spalte einen normalen Index legen, wenn die Tabelle groß wird. Bei Tabellen < 500 Zeilen lohnt das hingegen nicht.
Danke euch für eure Antworten.

Leider stimmt das nicht. Das gibt auch eine id zurück, wenn nur ein Datensatz den status 2 oder 4 hat.
Was ich versuche: Es soll sie id nur ausgeben, wenn ALLE status (mit dieser id) den status 2 oder 4 haben.

Gruss

Léo
 
Müsste doch so in der Art sein:
(status==2) and (status==4)
Du brauchst halt die logische Verknüpfung.
SQL Syntax weiß ich gerade nicht.
 
Hi,

ich verstehe schon den Text nicht. Zeig mal, was das Ergebnis sein soll. Zeigen, nicht erklären. Vielleicht auch mit einen etwas anderen Beispiel.

EDIT: Ah, jetzt hab ichs verstanden. Ich würd es andersum machen und erstmal die auswählen die NICHT 2 oder 4 enthalten. Diese Menge wiederum ausschließen. Also in etwa so:

Code:
SELECT * from where table where 'ID' not in  (SELECT DISTINCT ‘id‘ FROM table WHERE ‘status‘ not IN (2,4));
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: leo-magic
Ich vermute gemeint ist hier ein UND , jede ID für die es den status 2 und 4 je einmal gibt?
 
Ich habe jetzt kein SQL zur Verfügung.

select * from table where status = 2 and status = 2;

Bin mir aber nicht sicher, ob das funktioniert.
Das select geht doch immer nur auf einen Record und da kann ja nur ein Wert bei status stehen.
Oder liege ich da falsch?
 
Code:
SELECT distinct a.id
FROM table a
INNER JOIN table b
ON b.id = a.id
&& b.status = 4
WHERE a.status = 2

Table 2x durch den Tabellennamen erstzen.
Durch den INNER JOIN werden die IDs zusammengerechnet und es muss sowohl 2, als auch 4 vorhanden sein.
 
  • Gefällt mir
Reaktionen: wegus
Hi,

wenn ich den TE richtig verstehe, darf aber nichts zurückgeworfen werden, wenn der Status nicht 2 oder 4 ist. D.h. du musst erstmal alle rausfinden, wo etwas anderes als 2 oder 4 steht, um diese auszuschließen.

Code:
SELECT * from where table where 'ID' not in  (SELECT DISTINCT ‘id‘ FROM table WHERE ‘status‘ not IN (2,4));
 
Hi,

ich verstehe schon den Text nicht. Zeig mal, was das Ergebnis sein soll. Zeigen, nicht erklären. Vielleicht auch mit einen etwas anderen Beispiel.

EDIT: Ah, jetzt hab ichs verstanden. Ich würd es andersum machen und erstmal die auswählen die NICHT 2 oder 4 enthalten. Diese Menge wiederum ausschließen. Also in etwa so:

Code:
SELECT * from where table where 'ID' not in  (SELECT DISTINCT ‘id‘ FROM table WHERE ‘status‘ not IN (2,4));
Funktioniert perfekt, danke!

Wieso umgekehrt...?
 
Hi,

du suchst in dem Subselect erstmal das Gegenteil von dem, was du eigentlich herausfinden möchtest.
 
  • Gefällt mir
Reaktionen: genexx
Zurück
Oben Unten