如何创建一个表的子集

3
我有两张航班数据表格(delta和aa),我想创建一张新的表格,其中只包含在aa中与delta共享相同起始机场ID和目的地机场ID的行。
aa表格有89,940行,delta表格有245,052行。 我使用了:
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) 

这个操作会创建一个包含18,562,876行的表。为什么表的大小会变得更大而不是更小,以及如何正确地完成这个操作?


1
你正在连接两个表,因此应该使用JOIN语法。无论如何,你应该使用别名dl1吗?你的代码是否完整? - Lukasz Szozda
尝试使用 select distinct - Dan Bracuk
有没有办法完成我想做的事情?有几行是相同的(不同的航班,但起点和目的地相同),我想包括所有这些行。当我输入dl1时,我的意思确实是dl。 - learningPSQL
你的查询将会抛出一个错误,因为没有叫做dl1的表或别名。 - Dan Bracuk
  • 修复后仍输出更大的表格
- learningPSQL
3个回答

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);

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

0

尝试使用视图获取所需内容,然后在其上尝试“创建”操作。

尝试对您的代码进行以下修改:

 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)

确保您正确设置主键和外键。

希望它能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接