用来自不同数据库的相应名称替换ID

时间:2014-07-28 13:57:55

标签: mysql join

我有2个包含不同信息集的数据库,我基本上是尝试根据标准加入信息。

更确切地说。我有2个数据库,结构如下。

Table: accounts
------------------------
ID | Username | Password
------------------------
1  | John     | ........
2  | Kyle     | ........
3  | Jenny    | ........

Table: userdata
-------------------------
userid | DataCash | DataLevel
-------------------------
1  | 500 000$ | 100
2  | 999 000$ | 16
3  | 600$     | 53

我基本上想要做的是节省时间,节省大量时间。到现在为止,我一直在使用手动方法思考,我会轻松地进行查询。但实际上并非如此。

到目前为止,我会做这样的事情:

SELECT * FROM userdata WHERE userid = X

之后

SELECT username FROM accounts WHERE id = X

现在随着数据库的增长,手动执行此操作变得越来越困难。 P.S:我基本上这样做是为了制作一个Top5(数据库是SQLite,因此除了SQL语法之外我什么也得不到)

我已经读过有必要使用JOIN但到目前为止我无法弄清楚任何事情。以下是我试过的查询(我相信我错过了一些东西,但我不确切知道是什么)。

SELECT userid, key, value FROM userdata JOIN userdata ON id = userdata.userid WHERE LENGTH(value) = 2

这是我从另一个问题中提取出来的一个问题,但老实说,即使在尝试阅读JOIN上的MySQL帮助页面后,我也无法理解JOIN的工作方式

为了确保自己足够清楚,因为我相信可能会因为跨越这么多行而忽略了问题的轨迹,我想在运行查询后得到以下结果格式:

Username | DataCash | DataLevel

因此,加入后,它会从帐户中获取数据,并将userid替换为Username

1 个答案:

答案 0 :(得分:2)

SQL JOIN子句用于组合来自两个表(在您的案例中)的行,基于它们之间的公共字段,即表id中的列accounts和列表userid中的userdata

不同类型:

  • INNER JOIN(短名称JOIN):当BOTH表中至少有一个匹配时返回所有行
  • LEFT JOIN:返回左表中的所有行,以及右表中匹配的行
  • RIGHT JOIN:返回右表中的所有行以及左表中匹配的行
  • FULL JOIN:当其中一个表中存在匹配时,返回所有行

要查找所需的输出:

Select tbl_a.Username, tbl_b.Datacash, tbl_b.DataLevel
From accounts tbl_a    ## <--left side table 
 join userdata tbl_b   ## <--right side table
 on tbl_a.id = tbl_b.userid;

注意:tbl_a和tbl_b是表别名。给他们一个临时名字或短名。