2014-09-09 2 views
-1
select SUM(pass_count) ,SUM(fail_count),SUM(blocked_count),SUM(no_run_count) 
from TAble1(nolock) table1 
where owasp_id = (1,2,3,4,5,8) 
inner join 
Table 2 table2 
on 
TAble1.build_detail_id = table2.build_detail_id 
where 
TAble1.build_detail_id in(
select top 6 bdt.build_detail_id from table3 bdt order by 1 desc) 
and table1.test_run_id=1 

Je reçois erreur de syntaxe et je voudrais obtenir la somme des passcount, ne parviennent pas compte où owasp_id = 1,2,3,4,5,8 et faire jointure avec table 2 pour l'ID de détail de construction. Quelqu'un peut-il aider à cela?clause Where et jointure interne syntaxe de requête

+0

La base de données est livrée avec une excellente documentation qui décrit la syntaxe correcte et l'utilisation des mots-clés. Pourquoi ne pas l'utiliser? – jpw

Répondre

1

Il y a trois erreurs de syntaxe, les deux premiers sauts de la requête, le troisième est une recommandation forte:

  1. WHERE devrait venir après FROM et des JOIN clauses.
  2. owasp_id = (1,2,3,4,5,8) doit être owasp_id IN (1,2,3,4,5,8) lorsque vous fournissez plusieurs valeurs.
  3. La suppression de WITH pour les conseils de table (NOLOCK) est obsolète et doit être évitée.

Ainsi, la requête devrait probablement ressembler à ceci:

select SUM(pass_count) ,SUM(fail_count),SUM(blocked_count),SUM(no_run_count) 
from Table1 WITH (nolock) table1 
inner join Table2 table2 on TAble1.build_detail_id = table2.build_detail_id 
where owasp_id IN (1,2,3,4,5,8) 
AND Table1.build_detail_id in(
    select top 6 bdt.build_detail_id from table3 bdt order by 1 desc) 
and table1.test_run_id=1 

Indique si la requête fonctionnera comme prévu, je ne peux pas dire, mais il devrait être correct syntaxiquement au moins.

Questions connexes