2011-05-20 2 views
1
SELECT id, count(*) as Number 
FROM  (SELECT id FROM t1 
      UNION ALL 
      SELECT id FROM t2 
      UNION ALL 
      SELECT id FROM t3 
     ) t 
GROUP BY id 
ORDER BY Number DESC 

C'est la requête qui me donne le bon résultat. Mais quand je veux ajouter où appelle c'est une erreur de lancer.Comment résoudre cette requête particulière?

SELECT id, count(*) as Number 
FROM  (SELECT id from t1 
      UNION ALL 
      select id from t2 
      UNION ALL 
      select id from t3 
     ) t 
WHERE  Number > 10 
GROUP BY id 
ORDER BY Number DESC 

Répondre

2

Vous voulez tester les conditions sur une fonction d'agrégation avec une clause HAVING plutôt qu'un WHERE.

select id, count(*) as Number 
    from (select id 
       from t1 
      UNION ALL 
      select id 
       from t2 
      UNION ALL 
      select id 
       from t3) t 
    group by id 
    having Number > 10 
    order by Number desc; 
0
select 
    id, 
    count(*) as Number 
from 
    (
    select 
     id 
    from 
     t1 
    UNION ALL 
     select 
      id 
     from 
      t2 
     UNION ALL 
      select 
       id 
      from 
       t3 
    )t 
group by 
    id 
HAVING 
    Number > 10 
order by 
    Number desc; 

Essayez - je pense qu'il est plus facile à déboguer si vous faites votre requête facile à lire ...

+0

les autres requêtes sont plus faciles à lire que ce que vous avez fait. – Johan

+0

ouais si vous êtes un singe mort aveugle vendant du parfum ...: PI trouve que l'imbrication est plus facile mais bon chacun d'eux .. Juste pour dire que le formatage est un peu plus difficile à lire .. (PS OP n'a pas été formaté du tout) –

Questions connexes