2012-11-30 9 views
1

données:sélection mysql complexe requête

  1. tableau formes: shape_id, shape_name
  2. Table shape_forms: shape_form_id, shape_id, shape_form
  3. shape_form peut être: 0 - cercle, 1 - carré, 2 - triangle - dont le nombre pour chaque forme est illimité

J'ai besoin 2 requêtes de sélection

  1. toutes les formes qui contient en shape_forms les deux cercles et triangles ou cercles ne mais pas carrés ou triangles seulement
  2. toutes les formes qui contient en shape_forms seulement triangles

Donnez-moi quelques indices pour résoudre ce problème! Je suis limité à ne pas utiliser "groupe par" pour shape_forms mais s'il n'y a pas de solution appropriée

Répondre

1

1.

select s.shape_id 
from shapes s 
inner join shape_forms sf on sf.shape_id = s.shape_id 
group by s.shape_id 
having 
(
    sum(shape_form = 1) = 0 
    and sum(shape_form in (0,2)) >= 2 
) 
or sum(shape_form <> 0) = 0 

2.

select s.shape_id 
from shapes s 
inner join shape_forms sf on sf.shape_id = s.shape_id 
group by s.shape_id 
having sum(shape_form <> 2) = 0 
+0

merci! Exactement ce que je cherchais! n'a jamais pensé à l'aide complexe "ayant" une partie :) –