数据库查询 - 一对多

时间:2014-09-03 15:16:17

标签: sql ms-access

我确信这些问题之前已经得到解答,但我不知道该搜索什么。

我有2个表(来自Wordpress),用户和用户元数据。我需要创建一个获取元数据的查询,并将其包含在其他用户数据中。我正在开发MS Access中将使用WP数据的独立解决方案,因此我不能使用任何Wordpress特定功能。

基本上,我需要采用这两个表:

user_id | username
-------------------
   01   |  bob24
   02   |  james112


meta_id | user_id |  meta_key  | meta_value
-----------------------------------------
01      | 01      | first_name | Bob
02      | 01      | last_name  | Smith
03      | 02      | first_name | James
04      | 02      | last_name  | Jones

把它变成这个:

user_id | username | first_name | last_name
-----------------------------------------
01      | bob24    | Bob        | Smith
02      | james112 | James      | Jones

我确信这有一个词,但我不知道它叫什么。有人能指出我正确的方向吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

非常感谢@GolezTrol指出我正确的方向。我确实需要转动数据。我搜索和Access有这个功能。我创建了一个“交叉表查询”。如果其他人遇到同样的问题,这是查询。

TRANSFORM Last(meta.meta_value) AS LastOfmeta_value
SELECT meta.[user_id], Last(meta.[umeta_id]) AS [Total Of umeta_id]
FROM meta
GROUP BY meta.[user_id]
PIVOT meta.[meta_key];

答案 1 :(得分:0)

您可能正在寻找数据透视表,这是MySQL中一个缓慢而复杂的过程。 如果您想了解更多相关信息,可以阅读this question

但是,由于你似乎只有两个字段,也许连接对你来说很合适。 要使用连接执行此操作,请将元表连接两次。一次是名字,一次是姓:

select
  u.user_id,
  u.username,
  fn.meta_value as first_name,
  ln.meta_value as last_name
from
  User u
  left join Meta fn on fn.user_id = u.user_id and fn.meta_key = 'first_name'
  left join Meta ln on ln.user_id = u.user_id and ln.meta_key = 'last_name'

如果您只想拥有确实拥有姓氏的用户,可以将联接更改为内部联接,这也可能稍快一些。

答案 2 :(得分:-1)

假设您有两个包含meta和user

的表名
SELECT username
    , meta.meta_value
    , user_id
FROM user
INNER JOIN WHERE user.user_id = meta.user_id;