多表sql

作者: 江绫 | 来源:发表于2017-05-07 14:07 被阅读5次

实际场景中我们实现数据获取往往是多个表联合操作

eg: 从表group,user,user-group中获得每个分组的信息

自然连接

"select * from  \"SOFTWARE\".\"user_group\" , \"SOFTWARE\".\"group\", \"SOFTWARE\".\"user\""

+ " where    \"SOFTWARE\".\"group\" .  \"id\" =?  "

+ "AND "

+ " \"SOFTWARE\".\"user_group\" .\"group_id\"=  \"SOFTWARE\".\"group\" .\"id\""

+ "AND"

+ "\"SOFTWARE\".\"user_group\" .\"user_id\"=  \"SOFTWARE\".\"user\" .\"id\""

可以实现,但当user-group和user中没有与group绑定的数据时,即使存在group也查询为空。

左外连接

select * from  "

+ " (\"SOFTWARE\".\"group\"  left join  \"SOFTWARE\".\"user_group\""

+ " on \"SOFTWARE\".\"group\" .\"id\"= \"SOFTWARE\".\"user_group\" .\"group_id\")  "

+ " left join  \"SOFTWARE\".\"user\" "

+ " on \"SOFTWARE\".\"user_group\" .\"user_id\"= \"SOFTWARE\".\"user\" .\"id\""

+ "where  \"SOFTWARE\".\"group\" .\"id\"= ?"

解决问题,就算user-group和group中没有对应数据,左连接也会将左边的表group中内容输出,右连接同理

eg:删除一个分组以及这个分组下所有和用户的绑定关系

"delete  \"SOFTWARE\".\"group\" , \"SOFTWARE\".\"user_group\"  from  "

+ " \"SOFTWARE\".\"group\"  left join  \"SOFTWARE\".\"user_group\""

+ " on \"SOFTWARE\".\"group\" .\"id\"= \"SOFTWARE\".\"user_group\" .\"group_id\" "

+ "where  \"SOFTWARE\".\"group\" .\"id\"=?"

这个sql在mysql的环境下好用,oracle不行,oracle数据库不支持联合update和delete,为了实现一样的效果,提供两种解决方案

1.开启事务,在事务中对每个表单独delete

2.使用嵌套操作

delete  from  "

+ "("

+ "select 1  from \"SOFTWARE\".\"group\"  left join  \"SOFTWARE\".\"user_group\""

+ " on \"SOFTWARE\".\"group\" .\"id\"= \"SOFTWARE\".\"user_group\" .\"group_id\""

+ "where "

+ "  \"SOFTWARE\".\"group\" .\"id\"=?"

+ ")"

ORA-01752: 不能从没有一个键值保存表的视图中删除

相关文章

  • Mysql 一些实用方法笔记!

    sql 注入: sql 导入数据: 批量插入数据: sql 关联更新多表数据: sql 关联删除多表数据: mys...

  • SQL多表查询高级应用

    SQL多表查询 多表连接示范 两张表t_user t_judge 给两张表设置外键约束查询内容 SQL多表查询 多...

  • 多表sql

    实际场景中我们实现数据获取往往是多个表联合操作 eg: 从表group,user,user-group中获得每个分...

  • 不可置信!SQL 优化终于干掉了“distinct”

    sql 优化之多表联合查询干掉 “distinct” 去重关键字 所以需要把多表的子查询的 sql 结构进行优化。...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • sql多表查询

    普通多表查询 嵌套多表查询 链接多表查询 左链接(会将左表的内容全部输出,没有需要补NULL) 右链接(会将右表的...

  • sql多表操作

    创建表 多表操作

  • SQL多表连接

    表结构 SQL语句

  • SQL多表查询

    之前做过一个关于数据库的使用总结,里面写过一些关于数据库的常用方法的集合,但是我们在实例工作中,很可能涉及到一需要...

  • sql多表查询

    在面试中经常有这样的问题,从两个表A和B中获取有特定关系的数据.碰到这样的问题我们一般需要用到union和join...

网友评论

      本文标题:多表sql

      本文链接:https://www.haomeiwen.com/subject/ismutxtx.html