Mes seules expériences dans les requêtes sont avec MySQL, mais j'espère que c'est assez similaire.
Votre requête me semble étrange car votre sous-requête est dans la clause SELECT. Je n'ai jamais vu ça auparavant ... mais apparemment, il est supporté par MySQL. Habituellement, la sous-requête vient après un FROM ou LEFT JOIN ou JOIN.
Votre exemple est assez simple que vous pourriez le mettre en œuvre avec un LEFT JOIN:
SELECT C.guid, ..., COUNT(distinct D.id) as numprogs
FROM Computers AS C
LEFT JOIN ComputerData as D ON D.computer_id = C.id
Dans ce cas, LEFT JOIN est le bon type de jointure à utiliser, car même s'il n'y a pas d'enregistrement correspondant dans la D table pour un enregistrement C particulier, votre ensemble de résultats contiendra toujours cet enregistrement C et numprogs sera juste zéro, comme vous vous y attendez.
Si vous voulez vraiment utiliser une sous-requête, essayez ceci:
SELECT C.guid, ..., S.numprogs
FROM Computers AS C
LEFT JOIN
(SELECT computer_id, COUNT(*) as numprogs
FROM ComputerData GROUP BY computer_id) AS S
ON C.id=S.computer_id
Je suggère de simplifier votre requête pour obtenir qu'il soit le plus simple possible requête qui devrait fonctionner, mais ne fonctionne pas. Puis dites-nous le message d'erreur spécifique que votre moteur de base de données renvoie. Edit: J'ai lu dans le MySQL chapter about subqueries et il semble que vous devriez essayer de supprimer la clause "as numprograms" après votre sous-requête ... peut-être que vous n'avez pas le choix de nommer la colonne qui sort de la sous-requête après avoir composé la sous-requête.
Quelle est l'erreur? –
Bonjour, Désolé, cet article a été corrigé. Merci tout de même, Azuka – Zahymaka