Sql 在特定行的值之后拆分表

Sql 在特定行的值之后拆分表,sql,postgresql,Sql,Postgresql,postgres表“mytable”有“a”、“b”、“c”和“mycl”列 如何有效地拆分表,以便在“mycl”中具有值“x”的所有条目都进入一个表(“mytableX”)、在另一个表(“mytableY”)中具有值“y”的条目以及在另一个表中具有值“z”(“mytableZ”)的条目 这可以在纯sql中完成吗?在Postgres中,您可以执行以下操作: create table mytableX as select * from mytable where mycol = 'X';

postgres表“mytable”有“a”、“b”、“c”和“mycl”列

如何有效地拆分表,以便在“mycl”中具有值“x”的所有条目都进入一个表(“mytableX”)、在另一个表(“mytableY”)中具有值“y”的条目以及在另一个表中具有值“z”(“mytableZ”)的条目


这可以在纯sql中完成吗?

在Postgres中,您可以执行以下操作:

create table mytableX as
    select * from mytable where mycol = 'X';
您可以对每个表重复此操作

话虽如此,你想这么做的理由很少。拆分表不太可能提高查询效率;它增加了表格的数量;新表可能会从较大的表中过时;等等

我只能想出一个好理由。这将为每个表提供单独的访问控制。即使在这种情况下,也有其他选择,但将数据拆分为单独的表可以简化安全性

如果您真的需要类似的内容,视图可能比单独的表更好:

create view mytableX as
    select * from mytable where mycol = 'X';

为什么要这样做,而不是在需要时使用
where
子句?我知道有些接口问题听起来很愚蠢,但这是我提供数据的常用方式。PostgreSQL文档非常详细地介绍了如何做到这一点