SQL Einträge filtern

aebyss

Newbie
Registriert
Juli 2013
Beiträge
4
hi,

für euch bestimmt ein kleines problem:


die ids finden, die nicht 3 bestimmte einträge aufweisen.

hoffe ich habe mich verständlich ausgedrückt.


bsp:

tabelle t1

id | xyz
3 | f
3 | g
3 | t
5 | f
5 | g



bei der id 5 fehlt 't' und soll deswegen angezeigt werden

mfg
 
Wenn doppelte Einträge ausgeschlossen und nur diese Zeichen eingragen werden können, reicht ein
Code:
SELECT *
FROM tabelle t1
GROUP BY id
HAVING COUNT(xyz) < 3
 
sry da reicht kein counter. es muss genau auf die bezeichner der einträge der spalte 'xyz' geachtet werden, weil durchaus auch andere bezeichner vorkommen können, aber diese nicht beachtet werden dürfen. es muss also geprüft werden, ob zu einer id genau 3 definierte einträge vorhanden sind (f,g,t). wenn das nicht der fall ist, ausgeben..
 
Zuletzt bearbeitet:
SELECT *
FROM tabelle t1
where xyz in ('f','g','t')
GROUP BY id
HAVING COUNT(xyz) < 3;

wenn die menge (f,g,t) dynamisch eins oll kannst das mit "in (select xyz from t2 where XXXX) machen.
 
@bluebarcode: Diese Abfrage findet aber nicht diejenigen IDs, die weder f, noch g, noch t haben.
 
das wollte er doch oder seh ich das falsch...??

oder soll die ID 6 mit xyz=u auch angezeigt werden ?
 
Hast du denn irgendwo eine Tabelle, in der f, g und t irgendwo hinterlegt sind?
Code:
SELECT t3.*
FROM
	(
		SELECT
			t1.id,
			t2.xyz
		FROM
			tabelle t1 CROSS JOIN tmp t2
		WHERE
			t2.xyz IN ('f','g','t')
		GROUP BY
			t1.id,
			t2.xyz
	) t3 LEFT JOIN tabelle t4
		ON t3.id = t4.id
		AND t3.xyz = t4.xyz
WHERE
	t4.id IS NULL;
Testdaten:

t1:
Code:
id xyz
 3   f
 3   g
 3   t
 5   f
 5   g
 7   a
 7   b
 7   c
t2:
Code:
xyz
  a
  b
  c
  d
  e
  f
  g
  t
Resultat:
Code:
id xyz
 5   t
 7   f
 7   g
 7   t
Sollte doch so stimmen?
 
Zurück
Oben