我有一个查询要求我加入/引用同一个表,但是,我无法使用查询得到结果。
以下是我的查询示例
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和Pgadmin。 table1目前有140万个表。
是因为当桌面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"连接和使用它的语法很好地建立为"最佳实践"现在。
这个"显式连接语法的最大好处之一"是忘记加入谓词的原始查询,意外忘记正确加入变得不可能。 (&当发生这种情况时,会产生意想不到的笛卡尔积。)
所以,我鼓励你停止在表名之间使用逗号。采取这个简单的步骤将有助于您使用更好的连接语法。