在MySQL中如何使用连接?

4
如果我有两个表格,如下所示:
用户表 - “u”
userid | name
 1     |  lenova
 2     |  acer
 3     |  hp

传递表格-"p"

userid | password
 1     | len123
 2     | acer123
 3     | hp123

据我从教程中学到的,我可以使用 MySQL 中提供的多个连接方式将这两个表连接起来,如此处所述

如果我有一个像下面这样的表:

角色表“r”

roleid | rname
 1     | admin
 2     | user
 3     | dataanalyst

令牌表-"t"

tokenid| tname
 1     | xxxx
 2     | yyyy
 3     | zzzz

tole_token_association表-"a"

roleid | tokenid
 1     |  1
 1     |  2
 3     |  1
 3     |  3
 3     |  1

我需要进行一次连接操作,以便显示一个对应如下的表格: "rolename" 具有所有这些令牌。怎么做呢?我很困惑。是否可以进行连接操作?我非常喜欢mysql。我希望通过查询来掌握更多技能。请问有什么建议吗?

1个回答

1

当需要连接的列名相同时,最容易看到:

SELECT r.rname,
       t.tname
  FROM ROLE r
  JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid
  JOIN TOKEN t ON t.tokenid = rta.tokenid

这将仅返回与令牌相关联的角色。如果您有一个没有关联令牌的角色,则需要使用外连接,如下所示:

   SELECT r.rname,
          t.tname
     FROM ROLE r
LEFT JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid
     JOIN TOKEN t ON t.tokenid = rta.tokenid

这个链接可能会有所帮助——它是JOIN的可视化表示


1
@MatTheCat: 你可以这样做,但并非所有的数据库都支持NATURAL JOIN语法,而且我更喜欢明确我的连接条件。部分原因是因为这就是OP所问的——如何/在哪些列上进行JOIN。如果你对某人隐藏这些信息,那是没有帮助的... - OMG Ponies
好的,我刚刚注意到这是MySQL。当我的查询变得更长时,我喜欢节省许多字符^^ - MatTheCat
1
@Code 'N' Weed:如果我理解正确,是的——你可以创建一个派生表(也称为内联视图),它代表了rta将两个表链接在一起的方式。根本问题是要在你想关联的表中具有相同的列值(包括数据类型)——如果它们不是立即可用的(就像在你的例子中),那么你必须按照获取所需数据所必需的列关联顺序来链接/连接这些表。 - OMG Ponies
1
@Code 'N' Weed:是的,每次使用它运行查询时,派生表都将被重新创建,因此最好如果可能的话将数据存储在实际表中。 - OMG Ponies
@OMG 如果我想要连接两个表r和t,但是我不想要rta表。使用r和t,我想要连接它们并且只想要显示值。简单地说,在我指定的JS对话框中,它只是从不同的表中获取值并将其显示出来。我该怎么做呢?我认为我会发另一个问题,而不是让你感到困惑。对吧。 - IamIronMAN
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接