在子查询中为数据透视列的值实现 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 子句?的主要内容,如果未能解决你的问题,请参考以下文章