如何创建表的子集

时间:2015-11-30 17:19:56

标签: sql postgresql postgresql-9.3

我有两张表(deltaaa)的航班数据,我正在尝试创建一个新表,它将成为delta的一个子集。此子集仅包含delta中的行,这些行与origin_airport_id中的dest_airport_idaa共享相同的aadelta

CREATE TABLE dl_share AS SELECT delta.* FROM delta,aa WHERE (aa.origin_airport_id = delta.origin_airport_id AND aa.dest_airport_id = delta.dest_airport_id) 有89,940行,display:table有245,052行。 我用过:

border-spacing

创建一个包含18,562,876行的表。为什么表的大小更大而不是更小,我怎么能正确地做到这一点?

3 个答案:

答案 0 :(得分:1)

您应该使用WHERE EXISTS而不是JOIN

SELECT *
FROM delta d
WHERE EXISTS (
    SELECT 1 
    FROM aa 
    WHERE aa.origin_airport_id = d.origin_airport_id 
    AND aa.dest_airport_id = d.dest_airport_id);

答案 1 :(得分:0)

这样的事情怎么样?

SELECT delta.* 
FROM delta
inner join aa on aa.origin_airport_id = delta.origin_airport_id
and aa.dest_airport_id = delta.dest_airport_id

答案 2 :(得分:0)

尝试通过视图获取所需内容,然后尝试“创建”#39;在它上面。

尝试修改代码:

 CREATE TABLE dl_share AS SELECT delta.*,aa.* FROM delta,aa WHERE
 (aa.origin_airport_id = delta.origin_airport_id AND aa.dest_airport_id
 = delta.dest_airport_id)

确保您获得主键和外键。

希望它有效