在mysql中实现某种pivot
我在mysql中有一个这样的表 表:成员在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 | |----------------------
| 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不,他想要的是一个支点,而不是加入。