【问题标题】:MySQL Crosstab Query for Profile Table配置文件表的 MySQL 交叉表查询
【发布时间】:2018-05-04 13:59:37
【问题描述】:

我有下表。

CREATE TABLE `profiles` (
  `id` int(11) NOT NULL,
  `user` varchar(50) NOT NULL,
  `field` varchar(50) NOT NULL,
  `value` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--

-- 转储表profiles的数据

INSERT INTO `profiles` (`id`, `user`, `field`, `value`) VALUES
(1, 'jd', 'Name', 'John Doe'),
(2, 'jd', 'Phone', '0300000000'),
(3, 'rm', 'Name', 'Roger Moore'),
(4, 'rm', 'Phone', '03111111111');

我想查看如下数据。

Name | Phone
Johns Doe | 0300000000
Roger Moore | 03111111111

【问题讨论】:

  • 我认为罗杰摩尔的号码是 007
  • @Strawberry ..绝对
  • 这不是真正的“枢轴”或“交叉表”;它更像是“EAV”。

标签: mysql pivot-table crosstab entity-attribute-value


【解决方案1】:

您可以在配置文件表上使用自联接

如果所有用户都匹配两个字段,则使用内部联接

select a.value Name, b.value  Phone
from profiles a
inner join profiles b on a.user = b.user and b.field='Phone' 
where a.field='Name'

否则你应该使用左连接

select a.value Name, b.value  Phone
from profiles a
left join profiles b on a.user = b.user and b.field='Phone' AND  a.field='Name'

【讨论】:

  • 这通常是一个外连接
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2015-02-18
  • 2014-03-06
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多