首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将所有前缀表连接为一个

将所有前缀表连接为一个
EN

Stack Overflow用户
提问于 2019-01-16 14:09:54
回答 4查看 65关注 0票数 1

我有多个表,即jibs3_postsjibs4_postsjibs5_posts。诸若此类。有什么办法可以用jibs-prefix的通配符连接所有这些表吗?

例如:

代码语言:javascript
复制
SELECT * FROM 'jibs*_posts';

对不起,如果这是一个副本,但找不到任何解决办法。

P.P.S .这是一个WordPress多金属矿

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-16 14:23:48

1-获取你的桌子名称:

代码语言:javascript
复制
declare @row_number int = 0;

CREATE TEMPORARY TABLE JibsTables (table_name varchar(50), num int)

INSERT INTO JibsTables (table_name, num)
SELECT table_name, (@row_number:=@row_number + 1) AS num
FROM information_schema.tables 
WHERE table_schema='your_database_name'
  AND table_name like 'jibs%'

2-在循环中创建动态查询。

代码语言:javascript
复制
declare @counter = 1
declare @sql nvarchar(max);
declare @temptable nvarchar(100);
declare @limit int = (select count(*) from JibsTables)

while @counter <= @limit
begin
   set @temptable = select table_name from JibsTables where num = @counter

   if @counter <> @limit
   begin
      set @sql = @sql + ' select * from ' + @temptable + ' union'
   end
   else
   begin
      set @sql = @sql + ' select * from ' + @temptable + ';'
   end

   set @counter = @counter + 1
end

3-执行动态查询

代码语言:javascript
复制
PREPARE stmt1 FROM @sql
EXECUTE stmt1
DEALLOCATE PREPARE stmt1;

我熟悉MSSQL语法,尽力为mysql找到正确的语法,但我相信逻辑是清楚的。希望一切都好,请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2019-01-16 14:39:57

另一种选择。如果新的jibs表添加得不太频繁,您可以创建一个视图,将UNION的所有表都放在一起,然后针对视图编写查询。这样,你只需要做一次乏味的打字。

如果内存正常(自从我在Wordpress站点上玩了一段时间以来),您应该能够向数据库中添加必要的对象。

具有以下效果的事物:

代码语言:javascript
复制
CREATE VIEW v_jibs_posts AS
  SELECT <column_list> FROM jibs1_posts
  UNION
  ...<SELECTS from all the tables>
  UNION
  SELECT <column_list> FROM jibs<n>_posts

然后,当应用程序创建新表时,只需向视图添加一个额外的UNION即可。

当然,如果它们经常出现,那么维护起来就太麻烦了。

编辑:如果您想变得漂亮,可以使用periodically的dynamic生成一个ALTER VIEW语句来获取新的表,然后安排它定期运行。

票数 2
EN

Stack Overflow用户

发布于 2019-01-16 14:21:49

这在SQL中是不可能的,但是还有其他的方法。

如果有充分的理由放弃多个表(即,如果数据模型由一个公共表来满足),您可以进行从多个表到单个表的一次性转换。

如果有充分的理由保留多个表(即,如果您的数据模型中有某种东西,或者某种后勤限制,这就决定了这样的安排),那么这是一个组合工具的好情况。具体来说,您可以使用您最喜欢的编程或脚本语言来生成引用所有表的SQL,然后使用生成的SQL。

许多编程语言都允许您通过数据库绑定生成SQL并在同一个程序中使用它。

编辑:我看到您添加了wordpress标记(在它出现之前我就开始编写答案了),所以我不确定我的答案有多适用。也就是说,我不确定您有多少权限可以直接与数据库交互。如果您受到Wordpress所需内容和/或Wordpress允许您运行您想要运行的SQL的方式的限制,那么我的通用MySQL / SQL回答可能没有多大帮助。

不过,我的一般建议是用工具箱中的所有工具来解决这个问题,并考虑一种综合优势的方法,因为SQL不支持表名的通配符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54218896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档