select r.* from `user` u , role r , userrole ur WHERE u.userCode = 'admin' AND u.userId = ur.userId and ur.roleId =r.roleId 和 select r.* from `user` u INNER JOIN userrole ur ON u.userId = ur.userId INNER JOIN role r ON ur.roleId =r.roleId WHERE u.userCode = 'admin' 这两条sql语句有什么区别
时间: 2024-04-05 18:29:06 浏览: 62
这两条 SQL 语句的结果是相同的,都是查询用户 admin 所拥有的角色信息。
不同的是,第一条 SQL 语句使用了传统的 SQL 连接方式,即通过 WHERE 子句将三张表连接起来。而第二条 SQL 语句使用了 INNER JOIN 的方式进行连接,这是一种更为直观、易读的连接方式。同时,第二条 SQL 语句也更加规范,符合 SQL92 标准。
另外,第二条 SQL 语句的性能可能比第一条 SQL 语句更优,因为 INNER JOIN 语句会在执行查询前进行预处理,优化查询计划,从而提高查询效率。而传统的连接方式则需要在查询时动态地进行连接操作。
相关问题
<select id="pageCC" resultType="com.rabbiter.entity.RecordRes"> select a.*,b.name goodsname,c.name storagename,d.name goodstypename, (select u.name from user u where u.id=a.userid)username, (select u.name from user u where u.id=a.admin_id)adminname from record a ,goods b,storage c,goodsType d /* where a.goods=b.id and b.storage=c.id and b.goodsType=d.id*/ ${ew.customSqlSegment} </select>
这段代码是一个MyBatis的查询语句。该查询语句使用了动态SQL来构建查询条件。
首先,定义了一个id为pageCC的<select>标签,指定了返回结果的类型为com.rabbiter.entity.RecordRes。
在<select>标签内部,编写了一个复杂的SELECT查询语句。该查询语句从record表(a)、goods表(b)、storage表(c)和goodsType表(d)中查询数据。
在查询字段部分,使用了别名来简化字段名,例如a.*表示查询record表的所有字段,b.name表示查询goods表的name字段,c.name表示查询storage表的name字段,d.name表示查询goodsType表的name字段。
在子查询部分,使用了两个子查询来获取user表中对应id的name字段值,并分别用username和adminname进行别名。
在FROM子句中,使用了逗号将多个表名连接起来,表示进行了多表关联查询。
在WHERE子句中,注释掉了原本的条件,使用了动态SQL的占位符${ew.customSqlSegment}来引用外部传入的查询条件。
整体来说,这段代码是一个灵活的查询语句,可以根据外部传入的条件进行动态构建查询。
SELECT DISTINCT o.* FROM operatelog o INNER JOIN sys_user u ON o.user_id = u.id LEFT JOIN sys_user_department d ON d.user_id = u.id ${ew.customSqlSegment}加个条件modifytype=131
如果您想加上条件 `modifytype=131`,可以在这个 SQL 查询语句的最后加上 `AND modifytype=131`。修改后的 SQL 查询语句如下:
```
SELECT DISTINCT o.*
FROM operatelog o
INNER JOIN sys_user u ON o.user_id = u.id
LEFT JOIN sys_user_department d ON d.user_id = u.id
${ew.customSqlSegment}
AND modifytype=131
```
注意,这里的 `${ew.customSqlSegment}` 是一个占位符,具体的查询条件需要根据您的实际情况进行替换。
阅读全文