代码之家  ›  专栏  ›  技术社区  ›  UnkwnTech

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

  •  6
  • UnkwnTech  · 技术社区  · 15 年前

    我的问题和这个很相似 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子句 WHERE count > 0 但是当我这样做的时候,我得到了错误 Unknown column 'count' in 'where clause' 我是否可以引用where子句中的自定义字段而不复制逻辑?

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

    3 回复  |  直到 7 年前
        1
  •  21
  •   Michael Buen    15 年前

    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
    
        2
  •  16
  •   too much php    15 年前

    你可以使用 HAVING

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

    WHERE 但它能够处理计算出的列。 警告: 查询的其余部分已运行-它不能替代 哪里 条款

        3
  •  0
  •   LorenVS    15 年前

    我不是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;