2012-02-16 70 views
1

我有一個聯繫表,我希望查詢何時存在某個條件。我試過下面的查詢,但得到一個語法錯誤。如果條件在mysql

​​
+0

這是您的確切SQL嗎? 「contactDeleted」後面有一個沒有配對的反勾號字符 – nybbler 2012-02-16 06:00:51

+0

你最好用單詞描述你想要的東西,因爲錯誤的sql查詢字面上沒有解釋任何東西 – zerkms 2012-02-16 06:00:59

+0

@nybbler:是否反向是唯一讓你困惑的東西? ;-) – zerkms 2012-02-16 06:01:28

回答

1

如果我正確理解你的問題(這是很難與缺乏信息的您提供。採樣的數據集和預期結果通常是有益的),那麼我不認爲你需要的IF在所有的你想。以下將返回未刪除且具有(visibility =「private」和userId = 1)或(visibility =「group」和group = 3)的聯繫人

SELECT * 
FROM contact_details 
WHERE contactDeleted = 0 
    AND ( 
     (contactVisibility = "public") 
     OR 
     (contactVisibility = "private" AND contactUserId = 1) 
     OR 
     (contactVisibility = "group" AND contactGroup = 3) 
    ) 
+0

他們是一種表格中的3種聯繫方式。公共,私人和團體,如果聯繫是公開的,他們不需要任何條件。如果聯繫人是私人聯繫人,我們應該挖掘(這應該有我的id在contactUserId)。如果將他們的組合分組放在其他表中,那麼groupId值將保存在contactGroup中,並且它應該檢查與我的組匹配的天氣。 – 2012-02-16 06:23:45

+0

@ShankarSwamy這些筆記應該在你的問題。如果你的contactUserID = 1,那麼你的contactGroup = 3,或者是否需要根據其他一些內容搜索這些內容?我已更新爲accountVisibility =「public」 – nybbler 2012-02-16 06:27:42

0

我假設你想使用的IF()功能,而不是聲明這是存儲功能..

參考this link關於更多的信息。

請注意,您已經擺在那裏2個select語句,在自定義的返回值應該是。那麼,你是返回一個SELECT *...現在會發現,在上層的SQL語句,你有一個AND..所以你基本上可以寫AND SELECT *..,這將給你的語法錯誤。

嘗試使用.. AND x IN (SELECT *) ..來查找x是否在返回值中。

也讓我列出this link利用現有的和良好的書面答覆這也可能適用於您的問題。