Ma question est très similaire à celle-ci Comment faire référence à une coutume champ dans SQL J'ai la requête suivante:
SELECT * , (SELECT COUNT( id ) FROM cms_store_items WHERE speaker = cms_store_items_speakers.id ) AS count FROM cms_store_items_speakers LIMIT 0 , 30
3 Réponses :
Eh bien, pour le faire strictement comme vous le faites:
select
s.id,
s.col1,
count(i.speaker) as count
from
cms_store_items_speakers s
left join cms_store_items i on
s.id = i.speaker
group by
s.id,
s.col1
having
count(i.speaker) > 0
limit 0, 30
La première option fonctionne bien, semble que mon précédent (maintenant le commentaire supprimé était dû à la mise en cache), merci pour la solution.
changer le nombre (*) pour compter (i.Speaker), et le comptage (*) à compter (i.Speaker), juste à l'épreuve du code; Si la nécessité de compter zéro Correspondances se pose, changez simplement la jointure intérieure à gauche rejoindre, je vais uppouver votre réponse :)
@Michael: bonne prise! Merci!
Je ne suis pas sûr à 100% sur MySQL, mais quelque chose comme ça devrait être très possible:
(SELECT
*
FROM
(
SELECT cms_store_items_speakers.*,
(SELECT COUNT(id) FROM cms_store_items
WHERE speaker = cms_store_items_speakers.id) AS 'count'
FROM cms_store_items_speakers)
LIMIT 0, 30
)
WHERE count > 0;
Vous pouvez utiliser avoir la clause code> à la place: avoir code> est comme où code> mais il est capable travailler sur des colonnes calculées. AVEC CODE> Fonctionnement par les résultats de l'élagage après strong> Le reste de la requête a été exécuté - ce n'est pas un substitut pour le où < / CODE> CLAUSE. P> P>