mysql - JOINing 后旋转表不正确?

标签 mysql sql pivot-table

SELECT

  GROUP_CONCAT(if(meta_summary = 'content', content, NULL)) AS content, 
  GROUP_CONCAT(if(meta_summary = 'supplemental', content, NULL)) AS supplemental,
  GROUP_CONCAT(if(meta_summary = 'heading', content, NULL)) AS heading,

cms_pages.meta_filename as filename

FROM
cms_pages

INNER JOIN cms_collection

ON

cms_collection.collection_id LIKE CONCAT('%', cms_pages.page_id,  '/heading%' )
OR cms_collection.collection_id LIKE CONCAT('%', cms_pages.page_id,  '/content%' )
OR cms_collection.collection_id LIKE CONCAT('%', cms_pages.page_id,  '/supplemental%' )

INNER JOIN

cms_content ON cms_collection.collection_id = cms_content.collection_id

WHERE
site_id = 51

GROUP BY
cms_pages.page_id

GROUP BY 之前的架构:

Filename        Content

pageA           (Heading Content)
pageA           (Content)
pageA           (Supplemental Content)

所需的规则集:

Filename       Heading            Content          Supplemental
pageA          (Heading Content) (Content)         (Supp. Content)

我尝试阅读 http://www.artfulsoftware.com/infotree/queries.php#78但无法弄清楚为什么这对我不起作用 - 似乎它错误地分组连接了行.. 有些是正确的,有些看起来像是错误地与另一个页面的内容合并。这可能是因为我需要对组 concat 进行子查询,因为我的所有连接都是如此吗?

更新 #1:创建了一个 sqlfiddle @ http://sqlfiddle.com/#!2/fe3e3/1 ,但它实际上在那里工作..要么

a) 我没有正确地重新创建它 b) 也许是 NaviCat 弄乱了结果,尽管我对此表示怀疑

更新 #2: 找到了原因 - 这是因为我使用的 LIKE 是(正确地)匹配子字符串,所以“2/content”将匹配“22/content”等等。

我应该如何以有效的方式更改 cms_collection 上的 INNER JOIN 以进行精确匹配?

最佳答案

尝试从 LIKE 字符串匹配连接条件的开始中删除通配符,如下所示:

SELECT
  GROUP_CONCAT(if(meta_summary = 'content', content, NULL)) AS content, 
  GROUP_CONCAT(if(meta_summary = 'supplemental', content, NULL)) AS supplemental,
  GROUP_CONCAT(if(meta_summary = 'heading', content, NULL)) AS heading,
  cms_pages.meta_filename as filename
FROM cms_pages
INNER JOIN cms_collection ON
  cms_collection.collection_id LIKE CONCAT(cms_pages.page_id, '/heading%')
  OR cms_collection.collection_id LIKE CONCAT(cms_pages.page_id, '/content%')
  OR cms_collection.collection_id LIKE CONCAT(cms_pages.page_id, '/supplemental%')
INNER JOIN
  cms_content ON cms_collection.collection_id = cms_content.collection_id
WHERE
  site_id = 53
GROUP BY
  cms_pages.page_id

SQLFiddle here .

关于mysql - JOINing 后旋转表不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080364/

相关文章:

postgresql - Postgres - 按年份绑定(bind)相同类型的结果 - 从长到宽数据

mysql - 如何在 MySQL 中返回数据透视表输出?

PHP : could not find driver (PDO, MySql)

C# Mysql 插入数据不起作用

mysql 查询字符串变量

sql - 从文本文件批量插入 SQL Server 添加唯一标识符或跳过列

sql - 为什么要使用约束?

php - 将此 MySQL 查询转换为 Codeigniter Active Record

hadoop - pyspark数据帧转置问题

mysql - 查找没有窗口功能的第三次购买