选择联接表的列值作为结果列名 [英] Selecting a join table's column values as result column name

查看:121
本文介绍了选择联接表的列值作为结果列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下表格的WordPress数据库

I've a WordPress database with following tables

帖子

+--------------+
| Field        |
+--------------+
| ID           |
| post_author  |
| post_title   | 
| post_type    | 
+--------------+

postmeta

+--------------+
| Field        |
+--------------+
| meta_id      |
| post_id      |
| meta_key     |
| meta_value   |
+--------------+

并具有meta_keylatitudelongitude

如何编写SQL以将latitudelongitude显示为结果列名称?

How can I write SQL to show latitude and longitude as result column names?

+--------------+
| Field        |
+--------------+
| ID           |
| post_author  |
| post_title   |
| latitude     |
| longitude    | 
+--------------+

下面的查询是我的出发点

Below query is my starting point

SELECT ID, post_title, meta_key, meta_value FROM `wp_posts` 
LEFT JOIN `wp_postmeta` on ID=post_id 
WHERE post_type='place' AND (meta_key='latitude' OR meta_key='longitude') 
ORDER BY ID ASC

推荐答案

听起来像您想PIVOT latitudelongitude值.不幸的是,MySQL没有PIVOT函数,但是您可以使用带有CASE语句的聚合函数来复制它:

It sounds like you want to PIVOT the latitude and longitude values. Unfortunately, MySQL does not have a PIVOT function but you can replicate it using an aggregate function with a CASE statement:

SELECT p.ID, 
  p.post_title, 
  p.post_author,
  max(case when pm.meta_key='latitude' then pm.meta_value end) latitude,
  max(case when pm.meta_key='longitude' then pm.meta_value end) longitude
FROM `wp_posts` p
LEFT JOIN `wp_postmeta` pm
  on p.ID=pm.post_id 
WHERE p.post_type='place' 
  AND (pm.meta_key='latitude' OR pm.meta_key='longitude') 
GROUP BY p.ID, p.post_title, p.post_author
ORDER BY p.ID ASC

请参见带有演示的SQL提琴

这篇关于选择联接表的列值作为结果列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆