sql - 如何创建表的子集

标签 sql postgresql postgresql-9.3

我有两个飞行数据表(deltaaa),我正在尝试创建一个新表,它是 delta< 的子集。此子集仅包含 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 行的表。为什么表格的尺寸更大而不是更小,我该如何正确地做到这一点?

最佳答案

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

关于sql - 如何创建表的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004282/

相关文章:

mysql - 运行查询时没有结果(空白)- 试图从 3 个表中得出结果

sql - 将架构名称添加到动态 Postgres 查询

postgresql - 使用动态字段名称触发

c - PostgreSQL - 在 C 函数中使用日期常量

mysql - 数据库架构,1 个表或 2 个表

sql - OVER ORDER BY 中的多个列

sql - 权限被拒绝错误,如何导入*.sql数据库到 'postgres'用户

postgresql - 将时间差较小的交错记录分组

sql - 合并两个表,按比例交错两个表的选择查询结果

java - 如何使用 JOOQ 在 PostgreSQL 中插入带有 JSON 列的可更新记录?