gpt4 book ai didi

SQL 选择行并排除子项

转载 作者:可可西里 更新时间:2023-11-01 07:08:31 31 4
gpt4 key购买 nike

我有两个表 A 和 B。A 是 B 的父表。我试图找到所有没有特定 B 作为 child 的 As。通常我会做

SELECT A.id FROM A     WHERE A.id NOT IN         (SELECT B.AId FROM B WHERE B.someFK = foo);

但是出于性能原因,我不想使用内部选择。我试过类似的东西:

SELECT A.id FROM A     LEFT JOIN B ON (A.id = B.AId)    WHERE B.someFK != foo OR B.someFK IS NULL

问题是这会返回 As,它有多个 child ,不管他们是否有指定的 B。

编辑:将 B.id 更改为 B.someFK

最佳答案

我会选择 exists 子句,因为它是为此目的而创建的:

SELECT A.id FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.id = foo and B.AId=a.id);

在大多数数据库中,对于大型记录集,它的性能远高于 in 子句(它基本上是一个用于比较的数组)。

聚合也很昂贵,所以使用 exists 语句是恕我直言的方式。不过,您可以尝试针对您的场景进行聚合。

关于SQL 选择行并排除子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4164527/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com