inner join on后面判断字段aa是空就=3 不是空就不走此判断
时间: 2023-12-08 16:03:48 浏览: 23
您可以使用以下 SQL 语句实现您的需求:
```
SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id
WHERE IF(table1.aa IS NULL, 3, table1.aa) = table2.bb;
```
上述 SQL 语句中,使用了 IF 函数来判断 `table1.aa` 是否为空,如果为空,则将其值设置为 3,否则使用 `table1.aa` 的原值。然后再将这个值与 `table2.bb` 进行比较,从而实现您的需求。
相关问题
是用mybatis的inner join 并在on后面使用动态sql来添加判断
条件,可以实现多条件join吗?
答:是的,使用mybatis的inner join并在on后面使用动态sql来添加判断条件可以实现多条件join。在mybatis的mapper文件中,使用<if>标签来判断是否需要添加判断条件,并使用${}来引入变量。例如:
```
<select id="getUserInfo" resultType="User">
select u.*, r.role_name
from user u
inner join role r on u.role_id = r.id
<where>
<if test="username != null and username != ''">
and u.username = #{username}
</if>
<if test="roleId != null">
and u.role_id = #{roleId}
</if>
</where>
</select>
```
这个例子中,根据传入的参数来判断是否需要添加用户名和角色ID的条件,实现了多条件join。
为什么是inner join不是self join
INNER JOIN和SELF JOIN是SQL中两种不同的操作。
INNER JOIN是用于将两个表中的匹配行组合在一起的操作。它基于两个表之间的共同列值进行匹配,并返回满足匹配条件的行。INNER JOIN不同于SELF JOIN,因为它涉及到两个不同的表。
SELF JOIN是指在同一个表中进行连接操作。它将表视为两个不同的实例,并使用表中的列进行匹配。SELF JOIN通常用于在同一个表中比较不同行之间的数据。
所以,为什么是INNER JOIN而不是SELF JOIN呢?这是因为INNER JOIN是用于将两个不同表中的数据进行匹配,而SELF JOIN是用于在同一个表中比较不同行之间的数据。在这种情况下,我们需要将两个表中的数据进行匹配,而不是在同一个表中比较不同行之间的数据,所以使用INNER JOIN更合适。