2013-02-21 25 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