如何创建 table 的子集
How to create a subset of a table
我有两个 table(delta
和 aa
)的航班数据,我正在尝试创建一个新的 table,它将是delta
。此子集将仅包含增量中与 aa
中共享相同 origin_airport_id
和 dest_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)
确保你的主键和外键正确。
希望有用
我有两个 table(delta
和 aa
)的航班数据,我正在尝试创建一个新的 table,它将是delta
。此子集将仅包含增量中与 aa
中共享相同 origin_airport_id
和 dest_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)
确保你的主键和外键正确。
希望有用