2016-01-11 1 views
1

J'ai deux tables dans ma base de données, Department & DepartmentErrors. Le tableau DepartmentErrors contient une colonne appelée 'ErrorSELECT Instruction avec sous-requête corrélée/imbriquée

Je voudrais exécuter une instruction select sur la table Department, correspondant à toutes les occurrences connexes de ce ministère au sein DepartmentError, où la valeur Error correspond à un numéro. Je voudrais ensuite ajouter une colonne sur cet ensemble de résultats, pour chaque département, contenant combien de lignes correspondant à cet ID de département & La valeur d'erreur est apparue dans la table d'erreurs de département. Ceci est mon code à ce jour:

SELECT DISTINCT 
    Department.DeptID, 
    Name, 
    Size, 
    Location, 
    (
     SELECT COUNT(*) 
     FROM DepartmentErrors 
     INNER JOIN Departments ON DepartmentErrors.DeptID = Departments.DeptID 
     WHERE Error = 2 
    ) AS ErrorCount 
FROM Departments 
INNER JOIN DepartmentErrors ON Departments.DeptID = DepartmentErrors.DeptID 
WHERE DepartmentErrors.Error = 2 
+0

Tag votre question. 'mysql' et' sql-server' sont deux produits différents. –

+0

@John Bergqvist: Vous n'étiez pas censé supprimer les balises * both * 'mysql' et' sql-server', mais seulement enlever la balise incorrecte et garder la bonne. Avec la seule balise 'sql', nous savons qu'il s'agit du langage SQL, mais nous ne connaissons pas le SGBD - ce qui pourrait être utile car les dialectes SQL diffèrent. –

Répondre

1

Essayez celui -

SELECT d.DeptID, 
     d.Name, 
     d.Size, 
     d.Location, 
     e.ErrorCount 
FROM Departments d 
JOIN (
    SELECT DeptID, ErrorCount = COUNT(*) 
    FROM DepartmentErrors 
    WHERE Error = 2 
    GROUP BY DeptID 
) e ON d.DeptID = e.DeptID