2013-02-21 56 views
0

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

水到渠成的事情是使用

EXISTS Calculators 

但我的任务,我不能为使用任何我查询的关键字EXISTS或COUNT关键字(或任何其他基数运营商) 。

我最擅长的查询尝试执行这个迄今

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

但这只是给我不能想出一个语法错误。

我有另一个尝试:

((SELECT * FROM Calculators) IN Calculators) 

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

谢谢!

回答

2

我很困惑你的问题。如果你的表不是空的,你想返回一个布尔结果?如果是这样,这样的事情应该工作:

SELECT DISTINCT 'True' RetVal FROM Calculators 

Sample SQL Fiddle

记录是否存在,这将返回一个true值。如果没有记录,它将不会返回任何内容。不要以为在没有使用COUNT或其他聚合的情况下你可以返回false。可能取决于你的RDBMS。

- 编辑 -

看到你正在使用Oracle,这里是一个黑客返回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

+0

谢谢!我真的很喜欢你链接的工具 - 我发现它非常有用!你已经正确地理解了我,但是有什么办法可以改正我的问题,使其更清楚吗?我真的很想找到一些也会返回错误的东西,但我想如果我不能像这样工作,这并不重要。 – Froskoy 2013-02-21 02:19:59

+0

@Froskoy - 没问题,很高兴这可以帮助。关于你的问题,你在使用什么数据库?可能有办法,但我不确定你是否不能使用聚合函数。 – sgeddes 2013-02-21 02:21:53

+0

谢谢。我正在使用Oracle RDBMS。我还没有把这个标记作为答案,只是希望我能够排除错误的行为,但是如果我在第二天左右没有设法对其进行排序,我会做出排序。 – Froskoy 2013-02-21 02:25:48