where子句中的动态表名使用select中的字段

时间:2014-12-14 13:15:25

标签: mysql sql

我需要将标识符(数字)插入到满足几个条件的临时表中。 我使用insert into select结构。 其中一个条件是下一个。有表received_posts_1(id,post_id), received_posts_2(id,post_id) ... 每个选定的标识符都是收到帖子的表名的一部分。我需要在下一个表单的and子句中添加where部分。

and not exists(select 1 from CURRENT_RECEIVED_POSTS_TABLE where id = device_id and post_id = post_id_)

插入时间为while。停止条件是要插入的标识符的必要计数。

1 个答案:

答案 0 :(得分:1)

具有相同结构的多个表通常是数据库设计不佳的标志。一般来说,拥有一个表格会更好,其中的列可以区分您要执行的操作。

一种方法是使用视图创建这样的表:

create view received_posts
    select 1 as which, r.* from received_posts_1 r union all
    select 2, r.* from received_posts_2 r union all
    . . .;

然后,您可以在查询中使用此表。

更有效的方法是在适当的条件下重复存在:

not exists(select 1
           from received_posts_1
           where id = device_id and post_id = 1) and
not exists(select 1
           from received_posts_2
           where id = device_id and post_id = 2) and
. . .

如评论中所述,如果您知道特定调用查询所需的邮政表,则可以使用动态SQL。