我确信这个问题已经被问过/回答了,但我不知道这种操作是如何调用的,而且我的 SQL 知识是有限的。
我正在寻找一个 SQL 语句来合并两个表:
表用户:
ID hash
=========
1 abc
2 def
3 ghi
和 USER_FIELD 表:
ID user_id key value
=============================
1 1 firstname John
2 1 lastname Doe
3 2 firstname Justin
4 2 lastname Case
现在我想知道我是如何得到这个观点的:
ID hash firstname lastname
================================
1 abc John Doe
因此,如果我在用户字段表中添加一个带有键“电子邮件”的附加条目,我会在最后一个结果中得到一个新列
这仅在 MySQL 中可行还是我必须在 PHP 中更改结果?
这是否是一个好的数据库设计,或者我应该放弃它而采用不同的数据库设计(哪一个?)
你可以用join
and a group by
:
select u.*, firstname, lastname
from user u join
(select uf.user_id,
max(case when key = 'firstname' then value end) as firstname,
max(case when key = 'lastname' then value end) as lastname
from user_field uf
group by user_id
) uf
on uf.user_id = u.id;
您还可以通过一系列连接来完成此操作:
select u.*. firstname.value, lastname.value
from user u join
user_field firstname
on u.id = firstname.user_id and firstname.key = 'firstname' join
user_field lastname
on u.id = lastname.user_id and lastname.key = 'lastname';
您的结果似乎仅限于一个用户 ID。你可能想要一个where
带有此过滤器的子句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)