Probleme mit verschachtelten selects (?)

Servus!

Ich stehe auf dem Schlauch …
Habe folgende Tabelle (stark vereinfach dargestellt):

id | pn | aktuell |

1 | 111 | j |
2 | 111 | n |
3 | 111 | n |

4 | 333 | j |
5 | 333 | n |

6 | 666 | n |
7 | 666 | n |

8 | 888 | n |
9 | 888 | n |

10 | 999 | j |

Also: Jede pn kann beliebig viele Einträge in der Tabelle haben, und hat jeweils einen Wert ‚j‘ oder ‚n‘ in der Spalte „aktuell“.

Ich suche nun alle pn, die keinen Eintrag mit aktuell=‚j‘ in der Tabelle haben, also nur ‚n‘-Einträge.

Wie muss die Abfrage aussehen?

Liebe Grüße,
piranja

Hallo piranja,

k.a. was das mit verschachtelten Selects zu tun haben soll.

SELECT id, pn, aktuell WHERE aktuell=‚n‘;

Gruss
Stefan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nachtrag …
hatte das wesentlichste ueberlesen.

Hier das was du wohl suchst:

SELECT
id,
pn,
aktuell
FROM
pn
WHERE
1
AND id IN (
SELECT
id
FROM
pn
WHERE
1
GROUP BY
pn
ORDER BY
pn,
aktuell
)
AND aktuell = ‚n‘
LIMIT 0 , 30

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nachtrag …

Danke schonmal!
Aber was bedeutet die „1“ in den WHERE-Klauseln???

Hier das was du wohl suchst:

SELECT
id,
pn,
aktuell
FROM
pn
WHERE
1
AND id IN (
SELECT
id
FROM
pn
WHERE
1
GROUP BY
pn
ORDER BY
pn,
aktuell
)
AND aktuell = ‚n‘
LIMIT 0 , 30

Hallo piranja,

k.a. was das mit verschachtelten Selects zu tun haben soll.

SELECT id, pn, aktuell WHERE aktuell=‚n‘;

Gruss
Stefan

Servus!

Ich stehe auf dem Schlauch …
Habe folgende Tabelle (stark vereinfach dargestellt):

id | pn | aktuell |

1 | 111 | j |
2 | 111 | n |
3 | 111 | n |

4 | 333 | j |
5 | 333 | n |

6 | 666 | n |
7 | 666 | n |

8 | 888 | n |
9 | 888 | n |

10 | 999 | j |

Also: Jede pn kann beliebig viele Einträge in der Tabelle
haben, und hat jeweils einen Wert ‚j‘ oder ‚n‘ in der Spalte
„aktuell“.

Ich suche nun alle pn, die keinen Eintrag mit aktuell=‚j‘ in
der Tabelle haben, also nur ‚n‘-Einträge.

Wie muss die Abfrage aussehen?

Liebe Grüße,
piranja

Servus Fischlein, :wink:

ich stehe ebenfalls auf dem Schlauch… Du schreibst nämlich nicht, um was für eine Datenbank es sich handelt. Da meine Kristallkugel zum Polieren ist, gebe ich dir die Antwort für Oracle (ab 8i):

SQL\*Plus: Release 8.0.6.0.0 - Production on Fr Aug 24 09:28:48 2007

(c) Copyright 1999 Oracle Corporation. All rights reserved.


Verbunden mit: 
Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
With the Partitioning option
JServer Release 8.1.7.4.0 - Production

SQL\> select \* from piranha;

 ID PN A
--------- --------- -
 1 111 j
 2 111 n
 3 111 n
 4 333 j
 5 333 n
 6 666 n
 7 666 n
 8 888 n
 9 888 n
 10 999 j

10 Zeilen ausgewählt.

SQL\> select pn, sum(cnt) from (
 2 select id, pn, aktuell, case when aktuell = 'j' then 1 else 0 end cnt
 3 from piranha)
 4 group by pn having sum(cnt)= 0;

 PN SUM(CNT)
--------- ---------
 666 0
 888 0

SQL\> 

Ich hoffe, das hilft dir weiter.

Gruß,
Guido

ich stehe ebenfalls auf dem Schlauch… Du schreibst nämlich
nicht, um was für eine Datenbank es sich handelt. Da meine
Kristallkugel zum Polieren ist, gebe ich dir die Antwort für
Oracle (ab 8i):

sorry, stimmt, hab ich vergessen. Es handelt sich um MS SQL Server 2005, aber egal …

Ich hoffe, das hilft dir weiter.

Absolut.
Vielen lieben Dank!!!

piranja

Die 1 bedeutet schlicht und einfach, „überall wo ein Inhalt vorhanden ist“. In manchen Datenbankmanagementsystemen (wie z.B. MySQL) kann man das „WHERE“ hinten auch weglassen, somit bedeutet in MySQL
SELECT * FROM user WHERE 1;
das selbe wie
SELECT * FROM user;