栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

搜索多个表,并在结果行中显示表名

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

搜索多个表,并在结果行中显示表名

您正在寻找动态SQL。从系统目录中自动组装您的查询:

SELECt string_agg('SELECT student_name, '''        || c.oid::regclass || ''' AS tbl, pid FROM '        || c.oid::regclass        || $$ WHERe student_name = 'John Doe'$$      , E'nUNIOn ALLn')FROM   pg_namespace nJOIN   pg_class     c ON c.relnamespace = n.oidWHERe  n.nspname = 'public'         -- schema name where your tables lieAND    c.relname LIKE 't%'          -- and / or filter table namesAND    EXISTS (   SELECt 1 FROM pg_attribute    WHERe  attrelid = c.oid   AND    attname = 'student_name'  -- make sure column exists   AND    NOT attisdropped          -- and is alive   );

产生查询字符串:

SELECT student_name, 'tbl1' AS tbl, pid FROM tbl1 WHERe student_name = 'John Doe'UNIOn ALLSELECt student_name, 'tbl2' AS tbl, pid FROM tbl2 WHERe student_name = 'John Doe'UNIOn ALLSELECt student_name, 'tbl3' AS tbl, pid FROM tbl3 WHERe student_name = 'John Doe'...

然后在第二个调用中运行它,或者使用来使用PL /
pgSQL函数完全自动化它

EXECUTE
。示例:
从表中选择一组动态列,并获取每个列的总和

该查询生成带有经过清理的标识符的 安全
代码,以防止SQL注入。

oid::regclass
这里的解释。)

还有更多相关答案。使用搜索。

顺便说一句,

LIKE
student_name LIKE 'John Doe'
没有意义。如果没有通配符,请使用
=



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号