任何人都可以解释这个SQL查询吗?

时间:2010-09-24 15:39:18

标签: sql

今天,我的老板告诉下面的SQL查询并没有解释就出去了。它的工作性很好。 但我想知道它的工作方式。

SELECT NAME 
  FROM PERMISSIONTOKENS 
 WHERE ID IN (SELECT TOKENID 
                FROM ROLETOKENASSOCIATION 
               WHERE ROLEID = '1');

5 个答案:

答案 0 :(得分:9)

这里有两个查询。

内部查询:

SELECT TOKENID FROM ROLETOKENASSOCIATION WHERE ROLEID = '1'

将获得TOKENID ROLETOKENASSOCIATION ROLEID 1的所有SELECT NAME FROM PERMISSIONTOKENS WHERE ID IN(...)

外部查询:

PERMISSIONTOKENS

这将获得IN中具有内部查询结果集中ID的所有名称。

如果您不喜欢IN的语法,则可以使用联接重新编写此代码,而不是使用{{1}}。

答案 1 :(得分:5)

这是一个子查询。

基本上,内部SELECT检索令牌ID,然后将其反馈到外部SELECT查询中。您也可以使用INNER JOIN

实现相同目标
    SELECT name 
      FROM PERMISSIONTOKENS pt
INNER JOIN ROLETOKENASSOCIATION rta ON rta.TOKENID = pt.ID
     WHERE rta.ROLEID = '1';

答案 2 :(得分:2)

SELECT TOKENID FROM ROLETOKENASSOCIATION WHERE ROLEID = '1'

它选择ROLEID为1的所有TOKENID。这是查询的子查询

SELECT NAME FROM PERMISSIONTOKENS WHERE ID IN (...)

(...)是所有选择的TOKENID的集合。因此,整个查询将选择NAME,其中ID是具有ROLEID = 1的TOKENID之一。

答案 3 :(得分:0)

从ID为这组值的行中选择字段NAME:表ROLETOKENASSOCIATION的行中所有TOKENID,其中ROLEID ='1'。

答案 4 :(得分:0)

对于RoleTokenAssociation表中RoleId为“1”的每个TokenID,它将从PermissionTokens表返回该令牌的名称。