在SQL查询的WHERE子句中使用自定义字段

Unk*_*ech 6 mysql sql

我的问题与此非常相似如何在SQL中引用自定义字段我有以下查询:

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
Run Code Online (Sandbox Code Playgroud)

我需要添加一个看起来像的WHERE子句,WHERE count > 0但是当我这样做时,我得到错误Unknown column 'count' in 'where clause',无论如何我在where子句中引用自定义字段而没有重复逻辑?

我可以在我的代码中放置where子句的逻辑,但如果不需要,我不想向应用程序发送可能超过1000行的内容,这似乎是浪费资源.

Eri*_*ric 18

好吧,严格按照你的方式做到这一点:

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
Run Code Online (Sandbox Code Playgroud)

不过,做以下事情可能会更好.它充分利用了这个having条款:

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
Run Code Online (Sandbox Code Playgroud)


too*_*php 11

您可以使用HAVING子句代替:

...
) AS count
FROM cms_store_items_speakers
HAVING count > 0
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)

HAVING是的,WHERE但它能够处理计算的列.警告: 在运行查询的其余部分之后HAVING通过修剪结果来工作- 它不能替代该子句.WHERE