Используя пользовательское поле в операторе Where SQL-запроса

Вложенная структура могла использоваться в тестовом сценарии для сборщика "мусора".

6
задан Community 23 May 2017 в 12:25
поделиться

3 ответа

Ну, чтобы делать это строго так, как вы это делаете:

select
*
from
(
    SELECT * , (SELECT COUNT( id ) 
    FROM cms_store_items
    WHERE speaker = cms_store_items_speakers.id
    ) AS count
    FROM cms_store_items_speakers
) a
where a.count > 0
LIMIT 0 , 30

Хотя, вероятно, было бы лучше сделать следующее. Здесь хорошо используется предложение , имеющее :

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
18
ответ дан 8 December 2019 в 03:27
поделиться

Вместо этого вы можете использовать предложение HAVING :

...
) AS count
FROM cms_store_items_speakers
HAVING count > 0
LIMIT 0 , 30

HAVING похоже на WHERE , но оно может работать с вычисляемыми столбцами . Предупреждение: HAVING работает путем сокращения результатов после того, как остальная часть запроса была выполнена - это не замена предложения WHERE .

11
ответ дан 8 December 2019 в 03:27
поделиться

Я не уверен на 100% насчет mysql, но что-то вроде этого вполне возможно:

(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;
0
ответ дан 8 December 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: