如何在mysql中不使用完全外部连接就实现这一点?

如何在mysql中不使用完全外部连接就实现这一点?,mysql,sql,database,Mysql,Sql,Database,我有以下表格: 1) customfields +------+---------+-------+ |userid| fieldid | value | +------+---------+-------+ | 1 | 1 | 5c54 | | 2 | 1 | cerc | | 2 | 3 | 3545 | +--------+---------+-------+ |name | piva | code | +----

我有以下表格:

1)
customfields

+------+---------+-------+
|userid| fieldid | value |
+------+---------+-------+
|  1   |   1     |  5c54 |
|  2   |   1     |  cerc |
|  2   |   3     |  3545 |
+--------+---------+-------+
|name    | piva    | code  |
+--------+---------+-------+
|  ale   |   5c54  |       |
|  ben   |   cerc  |  3545 |
2)
用户

+------+---------+
|userid| name    |
+------+---------+
|  1   |   ale   |
|  2   |   ben   |
|  3   |   jak   |
我想实现:

piva
fieldid
=表中的1
customfields

+------+---------+-------+
|userid| fieldid | value |
+------+---------+-------+
|  1   |   1     |  5c54 |
|  2   |   1     |  cerc |
|  2   |   3     |  3545 |
+--------+---------+-------+
|name    | piva    | code  |
+--------+---------+-------+
|  ale   |   5c54  |       |
|  ben   |   cerc  |  3545 |
code
fieldid
=3在表
customfields

+------+---------+-------+
|userid| fieldid | value |
+------+---------+-------+
|  1   |   1     |  5c54 |
|  2   |   1     |  cerc |
|  2   |   3     |  3545 |
+--------+---------+-------+
|name    | piva    | code  |
+--------+---------+-------+
|  ale   |   5c54  |       |
|  ben   |   cerc  |  3545 |
我不知道如何实现这一点

您可以使用条件聚合:

select u.name,
       max(case when cf.fieldid = 1 then value end) as piva,
       max(case when cf.fieldid = 3 then value end) as code
from customfields cf join
     users u
     using (userid)
group by u.name;

这与
完全外部连接无关(MySQL不支持)。其中一种方法只是具有条件聚合的联接:

select u.name,
       max(case when cf.fieldid = 1 then value end) as piva,
       max(case when cf.fieldid = 3 then value end) as code
from customfields cf join
     users u
     using (userid)
group by u.name;

您可以尝试以下SQL查询:

Select u.name,
(Select value from customfields where fieldid = 1 and userid= u.userid) as piva, 
(Select value from customfields where fieldid =3 and userid = u.userid) as code 
from users u

这很好,但我很想了解发生了什么,你能帮我吗?@ciaoben使用
案例
表达式,我们可以为每个
fieldid
值生成一个值,即
fieldid=1
时的值和
fieldid=3
时的值
MAX
仅返回此值。