SQL:这样的查询是正确的还是更有效的方法,比如使用连接?

Bri*_*nan 5 sql select join

我经常发现自己想要编写如下的SQL查询:

SELECT body 
  FROM node_revisions 
 where vid = (SELECT vid 
                FROM node 
               WHERE nid = 4);
Run Code Online (Sandbox Code Playgroud)

我知道你可以做的有连接和东西,但它们似乎使事情变得更复杂.加入更好的方式吗?它效率更高吗?更容易理解?

Ode*_*ded 7

连接往往更有效,因为数据库是在考虑集合操作的情况下编写的(连接是设置操作).

但是,性能会因数据库而异,表格的结构,数据量以及查询返回的数量会有所不同.

如果数据量很小,我会使用像你这样的子查询而不是连接.

以下是连接的外观:

SELECT body 
FROM node_revisions nr
INNER JOIN node n
  ON nr.vid = n.vid
WHERE n.nid = 4
Run Code Online (Sandbox Code Playgroud)

我不会使用您发布的查询,因为有多个节点记录有nid = 4可能会导致它失败.

我会用:

SELECT body 
FROM node_revisions 
WHERE vid IN (SELECT vid 
             FROM node 
             WHERE nid = 4);
Run Code Online (Sandbox Code Playgroud)

这更具可读性或可理解性吗?在这种情况下,这是个人偏好的问题.