常见场景草稿
user (id,name,role_id)
role (id,name)
- 查找role列表每个role_id在user的个数
SELECT *,(SELECT count(*) from user where user.role_id = role.id) as num from role
- 提供
user.id列表(1,2,3)和role_id6 ,判断user.id列表的role_id是否都是6
SELECT count(*) as sum FROM user where id in (1,2,3) and role_id=6sum!=list.length,说明存在其他
role_id的user,或者user记录本身不存在,输出false。否则输出true
- 根据查询结果批量插入
无需用VALUES
INSERT INTO form_channel(form_no,channel_no) (select form_no,channel_no from form_list)
- 表单、渠道、应用记录、应用服务信息
## 创建表单
form_list:记录表单详情信息form_no,state,company_idform_channel: 记录表单绑定了哪些渠道form_no,channel_noform_game_list: 记录表单中所有应用的详情信息game_no,form_no,state
# 审核中
form_game_list:state=>'审核中'game_list:valid:-1,1,0 分别表示未开通/正服务/已挂起;game_no主键;- 不存在
package_name,company_id记录,则此时插入valid=-1,channel_no为null,game_ref_ing_no字段指向form_game_list表中的审核中记录的game_no - 存在
package_name,company_id记录,更新game_ref_ing_no字段,此时该应用所属渠道还是之前审核通过的 form_channel:修改表单的渠道配置操作
# 审核通过
form_game_list:state=>'审核通过'game_list: 删除package_name,company_id的记录,插入对应渠道列表的记录,并设置game_ref_ed_no
# 暂不支持
form_game_list:state=>'暂不支持'game_list: 不做操作
判断状态是审核还是升级就看是否存在game_ref_ed_no,增加state字段设置,方便查询
# 关闭、开启服务
game_list: 设置多个渠道的记录其valid=0/1=》正服务、已挂起
# 修改服务的渠道配置
game_list: 只有该服务拥有game_ref_ed_no值,才可以修改。删除之前记录,新增对应渠道记录
# 查看版本记录
package_name,company_id 去form_game_list中取
# 修改服务信息
ref_ed指向的一定是审核通过的
初次提交->审核中 一条无channelNo,无ref_ed,有ref_ing的记录
暂不支持->审核失败 之前记录无ref_ed,已存在ref_ing,处于未开通状态
审核通过->审核通过 之前记录无ref_ed,将原记录删除 并按渠道新增多条
再次提交->升级中 多条原记录,有ref_ed,设置ref_ing
暂不支持->审核失败 之前记录有ref_ed,将原记录删除 并按渠道新增多条
审核通过->审核通过 之前记录有ref_ed,将原记录删除 并按渠道新增多条
# 5. 判断字段是否为空 用 is NULL 而不是 =NULL
- 按role_id分组,多列合为一个字段,以&分割,每个元素包括id#name
SELECT GROUP_CONCAT(CONCAT_WS('#',id,name) SEPARATOR '&') from user GROUP BY role_id
- 联表删除,删除role表和user表中id=1的记录
DELETE ROLE,USER from ROLE,USER where user.role_id=role.id and role.id=1
这是全连接的方式,如果role表存在数据,user表不存在数据,删除就会失败。
采用左连接的方式,
DELETE ROLE,USER from ROLE LEFT JOIN USER ON user.role_id=role.id where and role.id=1
- NOT IN 和 is NULL 一起用
字段a的某条记录为NULL,而 a NOT IN (1,2,3) 不能得到该记录,应该是 a NOT IN (1,2,3) OR a is NULL