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

1 sql

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

SELECT NAME 
  FROM PERMISSIONTOKENS 
 WHERE ID IN (SELECT TOKENID 
                FROM ROLETOKENASSOCIATION 
               WHERE ROLEID = '1');
Run Code Online (Sandbox Code Playgroud)

Fru*_*ner 9

这里有两个查询.

内部查询:

SELECT TOKENID FROM ROLETOKENASSOCIATION WHERE ROLEID = '1'
Run Code Online (Sandbox Code Playgroud)

将得到的所有的TOKENID期从ROLETOKENASSOCIATION有一个ROLEID1.

外部查询:

SELECT NAME FROM PERMISSIONTOKENS WHERE ID IN(...)
Run Code Online (Sandbox Code Playgroud)

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

IN如果你不喜欢它的语法,你可以用连接而不是使用连接来重写它IN.


Jus*_*ier 5

这是一个子查询.

基本上内部SELECT检索令牌ID,然后将其反馈到外部SELECT查询中.您也可以使用以下方法实现相同目的INNER JOIN:

    SELECT name 
      FROM PERMISSIONTOKENS pt
INNER JOIN ROLETOKENASSOCIATION rta ON rta.TOKENID = pt.ID
     WHERE rta.ROLEID = '1';
Run Code Online (Sandbox Code Playgroud)