在mysql中实现某种pivot

在mysql中实现某种pivot,mysql,sql,pivot,Mysql,Sql,Pivot,我在mysql中有一个这样的表 表:成员 | Id | Name | Lastname | Username | -------------------------------- | 1 | Alexi| Lalas | alexi | 2 | Jack | Louis | louis 我有一个名为member images的表,其结构如下: 表:图像 | Id | MemberId | Image | Type | |----------------------

我在mysql中有一个这样的表

表:成员

| Id | Name | Lastname | Username 
| --------------------------------
| 1  | Alexi| Lalas    | alexi
| 2  | Jack | Louis    | louis
我有一个名为member images的表,其结构如下:

表:图像

| Id | MemberId | Image      | Type  |
|------------------------------------|
| 50 | 1        | face.jpg   |Avetar |
| 51 | 1        | image.jpg  |Gallery|
| 52 | 2        | main.jpg   |Avetar |
| 53 | 2        | jungle.jpg |Gallery|
我想得到这个结果

| Id | Name | Lastname | Username | Image1   | Image2   |
|-------------------------------------------------------|
| 1  | Alexi| Lalas    | alexi    |face.jpg  |image.jpg |
| 2  | Jack | Louis    | louis    |main.jpg  |jungle.jpg|
由于某些原因,我无法处理的是在应用程序端,而我必须在sql端。 想象一下,我总是有两种类型的图像,我们总是有图像1和图像2


任何帮助都将被通知。

方法是通过子选择(子查询)。您将子选择第一列作为Avestar类型用户的图像,而另一列子选择将用于Gallery类型的图像。如果无法找到一种方法使子表中的用户ID和类型唯一,那么这种类型的查询将出现问题。请记住,子选择可能会严重影响性能


由于它们只有两种类型,因此可以使用
大小写表达式来执行此操作。大概是这样的:

SELECT
  m.Id,
  m.Name,
  m.LastName, 
  m.UserName,
  MAX(CASE WHEN i.Type = 'Avetar' THEN i.Image END) AS 'Image1',
  MAX(CASE WHEN i.Type ='Gallery' THEN i.Image END) AS 'Image2'
FROM member AS m
LEFT JOIN image AS i ON m.Id = i.MemberId
GROUP BY m.Id,
         m.Name,
         m.LastName, 
         m.UserName;
注意:
左联接
将包括
成员
表中的所有成员,即使它们在
图像
表中没有图像,在这种情况下,将返回
NULL

请在此处查看它的实际操作:


你想要的关键词是加入:@TasosBitsios不,他想要的是一个支点,而不是加入。