如何创建 table 的子集

How to create a subset of a table

我有两个 table(deltaaa)的航班数据,我正在尝试创建一个新的 table,它将是delta。此子集将仅包含增量中与 aa 中共享相同 origin_airport_iddest_airport_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 行的 table。为什么 table 的尺寸更大而不是更小,我该如何正确地做到这一点?

你应该使用 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);

这样的事情怎么样?

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

尝试通过视图获取您想要的内容,然后在其上尝试 'create'。

尝试修改您的代码:

 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)

确保你的主键和外键正确。

希望有用