1

sub1 和 sub2 都与 super 是一对一的关系。

我希望确定给定超级记录中的任何一个是否存在连接。

以下两个查询应该会产生我想要的结果。是否有任何理由使用 !ISNULL() 与 IS NOT NULL?

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (!ISNULL(sub1.id) OR !ISNULL(sub2.id)) AND super.id=123;

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (sub1.id IS NOT NULL OR sub2.id IS NOT NULL) AND super.id=123;
4

1 回答 1

1

使用您的第二个选项 ( IS NOT NULL)。查询优化器可能会也可能不会帮助您提高第二个查询的效率。但是查询优化器不执行任何功能。它假定它必须评估您为所有可能的行和列提供的任何函数;它不会试图推断函数的含义。

于 2013-02-19T13:36:08.070 回答