在子查询中为数据透视列的值实现 WHERE 子句?

Posted

技术标签:

【中文标题】在子查询中为数据透视列的值实现 WHERE 子句?【英文标题】:Implementing a WHERE clause within a subquery for the value of a pivot column? 【发布时间】:2013-06-28 03:49:30 【问题描述】:

我已经成功地执行了一些表连接并使用数据透视表生成了一个结果(在 Ollie Jones 的帮助下)。 sql语句及结果如下。

我希望返回的结果只包含为今天或将来设置的枢轴列“日期”(我认为这是术语!?)值的行。从我所看到的WHERE date >= CURDATE() 应该可以完成这项工作,但是因为“日期”在技术上不存在,当我在语句末尾添加到 WHERE 子句时收到执行错误。我不确定如何将它集成到我的第二个子查询中,任何帮助将不胜感激:)

提前致谢

SELECT 
    content.id as id, content.alias as alias,

    ( 
        SELECT modx_site_tmplvar_contentvalues.value FROM modx_site_tmplvar_contentvalues 
        WHERE modx_site_tmplvar_contentvalues.tmplvarid = 324 
        AND modx_site_tmplvar_contentvalues.contentid = content.id 
     ) AS featured, 

    ( 
        SELECT modx_site_tmplvar_contentvalues.value FROM modx_site_tmplvar_contentvalues 
        WHERE modx_site_tmplvar_contentvalues.tmplvarid = 289 
        AND modx_site_tmplvar_contentvalues.contentid = content.id

     ) AS date

    FROM modx_site_content AS content 

    LEFT JOIN 
        modx_site_tmplvar_contentvalues AS tv_values
        ON tv_values.contentid = content.id 

    WHERE content.parent = 1842 
     AND content.published = 1 

    GROUP BY tv_values.contentid 
    ORDER BY featured DESC, date ASC

【问题讨论】:

【参考方案1】:

一个选项是更改“日期”部分并使用“左连接”:

SELECT 
    content.id as id, content.alias as alias,

    ( 
        SELECT modx_site_tmplvar_contentvalues.value FROM modx_site_tmplvar_contentvalues 
        WHERE modx_site_tmplvar_contentvalues.tmplvarid = 324 
        AND modx_site_tmplvar_contentvalues.contentid = content.id 
     ) AS featured, 

    date_values.value as date

    FROM modx_site_content AS content 

    LEFT JOIN 
        modx_site_tmplvar_contentvalues AS tv_values
        ON tv_values.contentid = content.id

    LEFT JOIN
        modx_site_tmplvar_contentvalues AS date_values
        ON date_values.contentid = content.id

WHERE content.parent = 1842 
    AND content.published = 1 
    AND date_values.tmplvarid = 289
    AND date_values.value >= CURDATE() 

GROUP BY tv_values.contentid 
ORDER BY featured DESC, date ASC

【讨论】:

以上是关于在子查询中为数据透视列的值实现 WHERE 子句?的主要内容,如果未能解决你的问题,请参考以下文章

在子查询中续集“WHERE”子句

在子查询中使用内联函数(在 WHERE 子句中)

带有相关数据的where子句的Linq查询

SQL 如何获取 XML 数据列的值并在 where 子句中使用它

如何在where子句中为每个名称最多获取两个条目[重复]

如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?