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

标签 sql mysql

我的问题与这个非常相似How to reference a custom field in 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

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

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

最佳答案

好吧,严格按照你的方式去做:

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

不过,执行以下操作可能会更好。它很好地利用了 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

关于sql - 在 SQL 查询的 WHERE 子句中使用自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297455/

相关文章:

MySQL Join - 仅当所有右表行满足 WHERE 子句时才检索左表行

java - 插入前检查注册数据? JAVA

python - MySQL python 连接器代码中止而没有错误(来自 MySQL 文档的代码)

mysql - 如何从数据库中查找所有值为 'Restrict' 的 onDelete 子句?

mysql - 计算投票结果

sql - Rails 5 查询以从我当前正在查看的帖子以外的同一类别中提取帖子

php - MySQL 内部在一列上连接两列

mysql - MySql中的跨表更新查询

php - 从javascript更新数据库表

SQL找人条目狗最多