当前位置: 首页 > 面试题库 >

选择联接表的列值作为结果列名

赏梓
2023-03-14
问题内容

我有一个带有下表的WordPress数据库

帖子

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

后元

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

并有记录与meta_keylatitudelongitude

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

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

下面的查询是我的起点

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

问题答案:

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

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 Fiddle



 类似资料:
  • 问题内容: 我有一个表“ propertyvalues”,如下所示: 如何在上面的表上编写SQL查询以获取如下所示的结果 问题答案: 具有连接的版本,无论缺少多少行,都可以正常运行: 如果您有一个表,其中主键在哪里,则可以用该表替换子查询。 关于效率,它取决于许多因素。例子: 所有FileID的行是否都具有名称,大小和类型,并且没有其他属性(并且表的聚集索引位于)?然后,该版本将运行良好,因为无论

  • 问题内容: 我有一个带有列名称的数据表: 其中“列”包含数字值,“期间”列是具有1到48的标识列,因此有48行。 我想将此表按摩成一种格式,在该格式中,我具有“名称”列和“值”列以及“期间”列。 我想创建原始表的视图来执行此操作吗?如何选择列名称,并将其以及该列中的正确值放入NameOfVehicle和Value列中? 问题答案: 如果您有固定的列,则始终可以执行以下操作: 如果列是动态的或未知的

  • 问题内容: 我有一个旧的用户信息表(仍在使用中),并且不能更改- 时区/语言/国家等只是名称的示例,它们可以是可变的/除了该列的行上的唯一列表外,没有其他任何有限列表 我需要一个MySQL兼容的SQL查询,该查询将返回- 我已经研究了关于将数据透视表功能窃取到MySQL的关于stackoverflow的各种答案,类似的方法,但是似乎没有一个比从相同表的列的唯一行值使用变量列名别名的情况更好。尽管我

  • 我正在使用查询与Spring数据jpa。我已经实现了自定义存储库来查找人名。人员实体如下所示: 实施的自定义存储库: 在选择表达式中,我想连接三列来构造全名。如果数据库有如下记录- 那么我想选“约翰·斯诺先生”。有什么办法可以做到吗? 我不想选择整个记录来连接值,因为实体有其他列和许多关联,加载整个记录不好。

  • 问题内容: 这是我的基本表(显示为关联数组): 在另一个名为的表上,我可以添加多个属于一行的自定义数据。像这样: 我目前正在制作,但它只会增加,并给我行。我想要的是我的查询返回如下内容: 行值变成一列,而,它就是值。 我该怎么做? 问题答案: SELECT a.ID, a.Campaign_ID, a.FirstName, a.LastName, MAX(CASE WHEN b.data = ‘q

  • 问题内容: 我有一个用于“个人档案”的表,以行样式存储个人档案属性值,例如: 和另一个用于属性定义的表: 如何使用或以任何其他方式以这种方式显示它: 问题答案: 不用关键字就可以轻松完成此操作,只需将其分组即可 您也可以使用关键字执行此操作