当前位置: 首页 > 知识库问答 >
问题:

提取sql中涉及到的表名?

拓拔奇
2024-08-26

请问ruby中如何获取到一条sql中涉及到的所有表

比如sql是 select * from users
结果是 users

简单的用正则可以匹配,但是复杂的好像匹配不了
在mysql层面有啥语句会查询得到吗

看了explain,里面好像没有列举出涉及到的表名

共有2个答案

艾昊明
2024-08-26

java的话可以看看jsqlparsr,这个是mybatisPlus在使用的,将sql解析成AST抽象语法树,然后你就可以拿到你想要拿到的任何部分
image.png

干浩然
2024-08-26

https://github.com/greenlion/PHP-SQL-Parser 可以用这个解析

SELECT a, b, c 
        FROM some_table an_alias
        JOIN `another` AS `another table` USING(id)
        WHERE d > 5

输出结果:

Array
(
    [SELECT] => Array
        (
            [0] => Array
                (
                    [expr_type] => colref
                    [base_expr] => a
                    [sub_tree] => 
                )

            [1] => Array
                (
                    [expr_type] => colref
                    [base_expr] => b
                    [sub_tree] => 
                )

            [2] => Array
                (
                    [expr_type] => colref
                    [base_expr] => c
                    [sub_tree] => 
                )

        )

    [FROM] => Array
        (
            [0] => Array
                (
                    [expr_type] => table
                    [table] => some_table
                    [alias] => Array
                        (
                            [as] => 
                            [name] => an_alias
                        )

                    [join_type] => 
                    [ref_type] => 
                    [ref_clause] => 
                    [base_expr] => some_table
                    [sub_tree] => 
                )

        )

    [JOIN] => Array
        (
            [0] => Array
                (
                    [expr_type] => table
                    [table] => another
                    [alias] => Array
                        (
                            [as] => AS
                            [name] => another table
                        )

                    [join_type] => JOIN
                    [ref_type] => USING
                    [ref_clause] => Array
                        (
                            [0] => Array
                                (
                                    [expr_type] => colref
                                    [base_expr] => id
                                    [sub_tree] => 
                                )

                        )

                    [base_expr] => JOIN `another` AS `another table` USING(id)
                    [sub_tree] => 
                )

        )

    [WHERE] => Array
        (
            [0] => Array
                (
                    [expr_type] => colref
                    [base_expr] => d
                    [sub_tree] => 
                )

            [1] => Array
                (
                    [expr_type] => operator
                    [base_expr] => >
                    [sub_tree] => 
                )

            [2] => Array
                (
                    [expr_type] => const
                    [base_expr] => 5
                    [sub_tree] => 
                )

        )

)
 类似资料:
  • 我有三个表,product、category和product_to_category。Product具有主键product_id、category_id和PRODUCT_TO_CategoryP2C_ID。product_to_category使用产品各自的ID以多对多的关系将产品链接到类别。 基本上,我想写一个查询,从类别表中不存在的类别中选择所有产品。这是由于产品正在从另一个数据库迁移。 我有

  • 问题内容: 我需要在python中编写一个正则表达式以从Tweets中提取提及。 我的尝试: 对于@mickey之类的任何提及,它都可以正常工作,但是,在带有@mickey_mouse之类的下划线的提及中,它仅提取@mickey。 如何修改正则表达式以使其在两种情况下均能正常工作? 谢谢 问题答案: 在下一组添加下划线,如下所示: Regex101演示 另外,Twitter Handle规则 允许

  • 智能机器人可以做到的事情可以很复杂:文字、语音、视频识别与合成;自然语言理解、人机对话;以及驱动硬件设备形成的“机器”人。作为一个只有技术和时间而没有金钱的IT人士,我仅做自然语言和人工智能相关的内容,不涉及硬件,也不涉及不擅长的多媒体识别和合成。所以索性就做一个可以和你说话,帮你解决问题的聊天机器人吧。 聊天机器人涉及到的知识主要是自然语言处理,当然这包括了:语言分析和理解、语言生成、机器学习、

  • 本文向大家介绍SQL Server 提取数字、提取英文、提取中文的sql语句,包括了SQL Server 提取数字、提取英文、提取中文的sql语句的使用技巧和注意事项,需要的朋友参考一下

  • “提取 SQL”让你从备份文件中提取 SQL 到一个 SQL 文件。 提取数据库或模式中的一个备份文件 打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击“提取 SQL”。 选择提取 SQL 选项并点击“提取”。 为 SQL 文件选择一个路径。 提取任意位置的备份文件 打开你的任何一个数据库或模式。 点击“备份”。 右击对象选项卡的任意位置并选择“提取 SQL 从”。

  • “提取 SQL”让你从备份文件中提取 SQL 到一个 SQL 文件。 提取数据库或模式中的一个备份文件 打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击 。 选择提取 SQL 选项并点击“开始”。 为 SQL 文件选择一个路径。 提取任意位置的备份文件 打开你的任何一个数据库或模式。 点击“备份”。 按住 Control 键并点按对象选项卡的任意位置,然后选择“提取