2011-04-03 107 views
47

這裏是我願意去工作的兩個語句,但返回的錯誤信息:使用「IF EXISTS」

IF EXISTS (SELECT * FROM gdata_calendars WHERE `group` = ? AND id = ?) SELECT 1 ELSE SELECT 0 

IF ((SELECT COUNT(*) FROM gdata_calendars WHERE `group` = ? AND id = ?) > 0) SELECT 1 ELSE SELECT 0; 

問號是那裏,因爲我用PHP的PDO使用參數化,準備好的語句。但是,我也嘗試手動執行這個數據,並且它確實不起作用。

雖然我想知道爲什麼它們每個都不起作用,但如果可以使用它,我寧願使用第一個查詢。

+0

您好,那是什麼,你所得到的錯誤訊息? – ysrb 2011-04-03 10:05:44

+0

對於它們兩個:錯誤1064(42000):您的SQL語法有錯誤; – 2011-04-03 10:11:50

回答

86

您不能使用IF控制功能的外部功能。這會影響你的兩個查詢。

轉動EXISTS內代替IF函數

SELECT IF(EXISTS(
      SELECT * 
      FROM gdata_calendars 
      WHERE `group` = ? AND id = ?), 1, 0) 

事實上,如1或0

SELECT EXISTS(
     SELECT * 
     FROM gdata_calendars 
     WHERE `group` = ? AND id = ?) 
+4

是否可以對布爾值返回執行另一個查詢? – Sagar 2015-10-06 09:32:57

+1

@RichardTheKiwi'SELECT EXISTS'返回什麼,'bool',我需要檢查C++中的記錄存在嗎? – KernelPanic 2015-10-30 14:51:53

+0

@RichardTheKiwi完美! – bjesua 2018-02-08 17:36:26

-7
if exists(select * from db1.table1 where sno=1) 
begin 
select * from db1.table1 where sno=1 
end 
else if (select * from db2.table1 where sno=1) 
begin 
select * from db2.table1 where sno=1 
end 
else 
begin 
print 'the record does not exits' 
end 
+4

你知道這個問題涉及到MySQL而不是微軟的SQL嗎? – 2013-09-25 11:04:43

25

我發現的示例RichardTheKiwi布爾值返回子句爲子查詢相當豐富。

只是提供另一種方法,如果你正在尋找的東西像IF EXISTS (SELECT 1 ..) THEN ...

- 我可能在MSSQL

IF EXISTS (SELECT 1 FROM Table WHERE FieldValue='') 
BEGIN 
    SELECT TableID FROM Table WHERE FieldValue='' 
END 
ELSE 
BEGIN 
    INSERT INTO TABLE(FieldValue) VALUES('') 
    SELECT SCOPE_IDENTITY() AS TableID 
END 

寫 - 改寫爲MySQL

IF (SELECT 1 = 1 FROM Table WHERE FieldValue='') THEN 
BEGIN 
    SELECT TableID FROM Table WHERE FieldValue=''; 
END; 
ELSE 
BEGIN 
    INSERT INTO Table (FieldValue) VALUES(''); 
    SELECT LAST_INSERT_ID() AS TableID; 
END; 
END IF; 
+5

這裏出現語法錯誤。 – 2017-09-06 07:44:24

+0

此答案的MySQL部分似乎不起作用。 – 2018-01-04 15:30:57

0

選擇如果((SELECT count(*)FROM gdata_calendars WHERE group =?AND id =?),1,0);

查看詳細的解釋,您可以訪問here