怎么从一段复杂的SQL中把所有的表都取出来?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么从一段复杂的SQL中把所有的表都取出来?相关的知识,希望对你有一定的参考价值。

如题!

说个思路:
表名的前面一般是 from +空格 ,from + 回车, 所以先定位from ,然后去掉前面的空格或回车,后面一般是空格或者回车,所以第二步就是从剩下的字符串中取到空格或回车,这样应该就能取得表名了,如果有多个表就再去判断\',\'。当然还要判断left join ,join , right join ,所有的表名就循环取了。
参考技术A 不太可能,坐等高手 参考技术B 题目的 参考技术C select * from =???

Spring 项目中把 SQL 语句写在 .sql 文件中

我们在使用 JDBC 时, 如果把所有的 SQL 语句全写在 Java 文件中, 由于 Java 不支持 Here Document, 多行字符串要么用加号, 要么用 Java 8 的 String.join() 方法来连接, 同时不能对 SQL 语句进行语法加亮, 所以这样的 SQL 字符串阅读性很差. 别说为何不用 Hibernate 之类的而不直接写原始的 SQL 语句, 在操作复杂的系统时还是会用到 JdbcTemplate 吧.

所以我们希望能把 SQL 语句写在单独的 *.sql 文件里, 这样很多编辑器就能语法高亮显示, 或在输入时还能得到智能提示. 有种办法是把 *.sql 用作为属性文件, 那么在其中定义多行的 SQL 语句时就得这样

select.user=select id, firstname, lastname, address \
  from users \
  where id=?

加载后就能用 getProperty("select.user") 来引用相应的语句了. 属性文件的换行与 Bash  一样, 也是用  \, 但如此, 则 *.sql 并非一个纯粹的 SQL 文件, 不能正确的进行语法加亮, 一旦写上 SQL 的注释 -- 就更是在添乱了.

所以我们的第二个方案是: 首先 *.sql 就该是一个真正的  SQL 文件, 而不是伪装的属性文件, 为了能在程序中引用每一条 SQL 语句, 我们该如何表示各自的 Key 呢? 这里的灵感仍然是来自于 Linux Shell, 在 Linux Shell 中指定执行环境的用了特殊的注释方式 #!, 如

#!/bin/bash
#!/usr/bin/env python

阅读全文 >>


以上是关于怎么从一段复杂的SQL中把所有的表都取出来?的主要内容,如果未能解决你的问题,请参考以下文章

Spring 项目中把 SQL 语句写在 .sql 文件中

创建返回具有复杂 SQL 的表的 Oracle 视图或过程,是不是可能以及如何?

怎么从本机的sql数据库中把表上传到web服务器的sql数据库中

为什么我建议在复杂但是性能关键的表上所有查询都加上 force index

JAVA入门到精通-第61讲-复杂查询

thinkPHP两个表查询:从一个表里取出6条数据的id,再根据这些id去查另一个表里的数据