SQL 如何用A表作为条件查询出B表的数据后添加额外字段

SQL 如何用A表作为条件查询出B表的数据后添加额外字段

Xy718 920 2019-11-26

今天半夜想起来有个功能没做,然后大清早就爬起来写。可惜业务涉及新表和第三方二开的数据表,无奈负责持久层的同学还没起来,自己研究咯

先展示两个数据表结构

数据内容:

描述下持久层的业务需求:

A表是用于记录选择的B表的某几行数据的内容,也就是类似于B表再加一个is_select字段用于记录选择。目前由于不方便修改B表的结构,用两张表来实现

Thinking

前段时间见过负责持久层的同学用IF关键字来代替一个字段判断内容,这次应该也是一样的情况

Doing

搞了一会,完成了:

也就是在A表中选择了的B的数据后面都加上了is_select然后判断是否取出了内容

SQL

SELECT
    B.id,
    B.content,
    IF((SELECT `select` FROM A WHERE `select`=B.id),1,0) AS is_select
FROM A,B
GROUP BY B.id

SQL语句的IF(expr1,expr2,expr3)关键字中的expr1作为表达式当返回值为TRUE或者expr1 <> 0 and expr1 <> NULL时返回expr2否则返回expr3

那么我在上条sql中就没有使用=运算符,而是直接取了A表的select字段,利用默认的是否为空来判断返回1/0,然后将列取名为is_select

ps:当sql关键字作为字段名取值时,需要在两边加上反引号 ` 也就是大键盘上1按键左边,TAB键上方的按


冶心·练体·得技