如何在mysql中不使用完全外部连接就实现这一点?
我有以下表格: 1)如何在mysql中不使用完全外部连接就实现这一点?,mysql,sql,database,Mysql,Sql,Database,我有以下表格: 1) customfields +------+---------+-------+ |userid| fieldid | value | +------+---------+-------+ | 1 | 1 | 5c54 | | 2 | 1 | cerc | | 2 | 3 | 3545 | +--------+---------+-------+ |name | piva | code | +----
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
=表中的1customfields
+------+---------+-------+
|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
仅返回此值。