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
 
RD11

RD11

Mitglied
Dabei seit
03.08.2006
Beiträge
877
Reaktionspunkte
551
select id where status in(„2“,“4“)

mit den Anführundszeichen musst Du probieren.
 
JARVIS1187

JARVIS1187

Aktives Mitglied
Dabei seit
26.08.2021
Beiträge
1.473
Reaktionspunkte
1.476
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.
 
RD11

RD11

Mitglied
Dabei seit
03.08.2006
Beiträge
877
Reaktionspunkte
551
Da merkt man, dass ich schon ein paar Jahre raus bin 😋🧐
 
JARVIS1187

JARVIS1187

Aktives Mitglied
Dabei seit
26.08.2021
Beiträge
1.473
Reaktionspunkte
1.476
Es ist nie zu spät, wieder damit anzufangen 😜
 
RD11

RD11

Mitglied
Dabei seit
03.08.2006
Beiträge
877
Reaktionspunkte
551
wenigstens jt die Richtung gestimmt
 
L

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.178
Reaktionspunkte
4
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
 
oneOeight

oneOeight

Aktives Mitglied
Dabei seit
23.11.2004
Beiträge
69.086
Reaktionspunkte
17.352
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.
 
carstenj

carstenj

Aktives Mitglied
Dabei seit
13.03.2008
Beiträge
1.326
Reaktionspunkte
737
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:
wegus

wegus

MU Team
Dabei seit
13.09.2004
Beiträge
18.971
Reaktionspunkte
6.722
Ich vermute gemeint ist hier ein UND , jede ID für die es den status 2 und 4 je einmal gibt?
 
RD11

RD11

Mitglied
Dabei seit
03.08.2006
Beiträge
877
Reaktionspunkte
551
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?
 
JARVIS1187

JARVIS1187

Aktives Mitglied
Dabei seit
26.08.2021
Beiträge
1.473
Reaktionspunkte
1.476
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.
 
carstenj

carstenj

Aktives Mitglied
Dabei seit
13.03.2008
Beiträge
1.326
Reaktionspunkte
737
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));
 
L

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.178
Reaktionspunkte
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...?
 
carstenj

carstenj

Aktives Mitglied
Dabei seit
13.03.2008
Beiträge
1.326
Reaktionspunkte
737
Hi,

du suchst in dem Subselect erstmal das Gegenteil von dem, was du eigentlich herausfinden möchtest.
 
Oben