在SQL中模拟EXISTS的行为

时间:2013-02-21 01:52:19

标签: sql

我有一个表计算器,我想创建一个返回布尔结果的SQL查询,当且仅当计算器不为空时才返回true所以我可以将此布尔值返回给我的应用程序并订购更多。

自然就是使用

EXISTS Calculators

但是对于我的作业,我不允许在任何查询中使用EXISTS关键字或COUNT关键字(或任何其他基数运算符)。

到目前为止,我对查询执行此操作的最佳尝试是

((SELECT * FROM Calculators) IN ANY (SELECT * FROM Calculators))

但这只是一个我无法弄清楚的语法错误。

我又做了一次尝试:

((SELECT * FROM Calculators) IN Calculators)

但是这也会出现语法错误?我真的认为这可以使用IN以某种方式完成,但我不能完全形成查询。你能帮我从我的查询中得到一个布尔值,如果计算器非空,你会返回true吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我对你的问题感到困惑。如果表不为空,您想返回布尔结果吗?如果是这样,这样的事情应该有效:

SELECT DISTINCT 'True' RetVal FROM Calculators

Sample SQL Fiddle

如果存在任何记录,这将返回单个布尔值True。如果不存在记录,它将不返回任何内容。如果不使用COUNT或其他聚合,请不要认为您可以返回false。可能取决于您的RDBMS。

- 编辑 -

看到你正在使用Oracle,这里有一个hack返回true或false:

SELECT DISTINCT 'True' RetVal
FROM Calculators
UNION 
SELECT 'False' FROM DUAL d
LEFT JOIN Calculators c ON 1=1
WHERE CalculatorId IS NULL

更多fiddle