为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL 通过子选择变量过滤 WHERE

MySQL 通过子选择变量过滤 WHERE

PHP
慕妹3146593 2023-07-21 15:43:53
我有一个带有子选择语句的查询,我正在寻找一种在 where 子句中使用它的方法,如下所示:SELECT      p.id as project_id, (            SELECT      pfva.dateValue            FROM        ProjectFieldValue pfva            WHERE       (pfva.fieldKey = 'listing_date' AND p.id = project_id)            LIMIT 1                     ) as table_filter_dateFROM        Project pJOIN        ProjectFieldValue pfv ON         p.id = pfv.project_idWHERE       (fieldKey = 'contract_status' AND pfv.textValue IN ('Active'))AND         table_filter_date BETWEEN '2020-06-06' AND '2020-12-12'这似乎不起作用......AND table_filter_date BETWEEN '2020-06-06' AND '2020-12-12'我收到以下错误:Unknown column 'table_filter_date' in 'where clause'有什么方法可以在 HAVING 或 FIND_IN_SET 中或在 WHERE 中以某种方式使用此值“table_filter_date”。我基本上需要能够通过此变量以及开始日期和结束日期(使用 BETWEEN 和 AND)以某种方式过滤结果。
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您可以通过将查询包含为“表表达式”来生成此命名列。例如:


select *

from ( -- table expression "x" starts

  SELECT    p.id as project_id, (

            SELECT      pfva.dateValue

            FROM        ProjectFieldValue pfva

            WHERE       (pfva.fieldKey = 'listing_date' AND p.id = project_id)

            LIMIT 1         

            ) as table_filter_date

  FROM      Project p

  JOIN      ProjectFieldValue pfv

   ON       p.id = pfv.project_id

  WHERE     (fieldKey = 'contract_status' AND pfv.textValue IN ('Active'))

) x -- table expression "x" ends

WHERE   table_filter_date BETWEEN '2020-06-06' AND '2020-12-12'


查看完整回答
反对 回复 2023-07-21
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

存储table_filter_date在变量中并在您的WHERE子句中使用它:


SELECT      p.id as project_id, ( @tfd := (

            SELECT      pfva.dateValue

            FROM        ProjectFieldValue pfva

            WHERE       (pfva.fieldKey = 'listing_date' AND p.id = project_id)

            LIMIT 1         

            ) ) as table_filter_date

FROM        Project p

JOIN        ProjectFieldValue pfv

 ON         p.id = pfv.project_id

WHERE       (fieldKey = 'contract_status' AND pfv.textValue IN ('Active'))

AND         @tfd BETWEEN '2020-06-06' AND '2020-12-12'


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信