我有两张表(delta
和aa
)的航班数据,我正在尝试创建一个新表,它将成为delta
的一个子集。此子集仅包含delta中的行,这些行与origin_airport_id
中的dest_airport_id
和aa
共享相同的aa
和delta
。
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行的表。为什么表的大小更大而不是更小,我怎么能正确地做到这一点?
答案 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)
确保您获得主键和外键。
希望它有效