SQL引用查询中的同一个表Stuck

时间:2017-09-25 15:52:46

标签: sql postgresql

我有一个查询要求我加入/引用同一个表,但是,我无法使用查询得到结果。

以下是我的查询示例

SELECT a."column1", b."column1" as anotherColumn
FROM table1 AS a, table2 AS b
where a.'x' = b.'x' 
AND NOT a.'y' = b.'y'

此查询需要永远加载。但是,如果我只是运行:

SELECT a."column1"
FROM table1 AS A

它只需要14秒。

我目前正在使用PostgreSQL和Pg​​admin。 table1目前有140万个表。

是因为当桌面1首次被称为“

”时会有锁定

编辑:每一行都包含"作者","已出版的图书"在这种情况下,一本书可能有很多作者,因此是合作者。我想要实现的是找出每个作者的合作者数量

1 个答案:

答案 0 :(得分:0)

  

我想要实现的是找出每个作者的合作者数量

这样的事情会计算作者的数量,我想这个数字大于1,合作者的数量就是那个数字 - 1

select b.name, count(a.*)-1 as num_collaborators
from books b
inner join authors a on b.id = a.book_id
group by b.name
having count(a.*) > 1

--original
SELECT a."column1", b."column1" as anotherColumn
FROM table1 AS a, table2 AS b
;

--amended
SELECT a."column1", b."column1" as anotherColumn
FROM table1 AS a, table2 AS b
where a.'x' = b.'x' 
AND NOT a.'y' = b.'y'

超过25年前 SQL的ANSI标准引入了更多" explicit"连接和使用它的语法很好地建立为"最佳实践"现在。

这个"显式连接语法的最大好处之一"是忘记加入谓词的原始查询,意外忘记正确加入变得不可能。 (&当发生这种情况时,会产生意想不到的笛卡尔积。)

所以,我鼓励你停止在表名之间使用逗号。采取这个简单的步骤将有助于您使用更好的连接语法。