2017-04-05 76 views
0

在這個SQL我只是想檢查在」ON「子句b.block ='False'.Because有時」profileview「表值是空的 我只是想,如果user_fullinfo值profileview與此條件b.block =「假」應該是顯示相匹配時,如果值不存在於輪廓圖也然後它應該顯示,SQL錯誤說「不正確的語法」=「

SELECT a.* FROM user_fullinfo a left join profileview b on 
CASE 
WHEN a.id=b.rid and b.rid='105' THEN 
b.block='False' 
END 
where gender != 'Male' and (DATEDIFF(YY,dob,GETDATE()) Between '10' and '100') and (a.heightid between 58 and 65) and(a.complexionid = '3' or a.complexionid = '4' or a.complexionid = '5') and a.bodytypeid = '4' and a.marital_statusid = '3' 

它說SQL錯誤(102):不正確語法靠近「=」.. 請給解決辦法..

+0

爲什麼'mysql'標記在這裏? –

+0

聲明是mysql-syntax,無法識別我的sql服務器 – Psi

+0

連接條件在哪裏? –

回答

0

布爾表達式不適合作爲值,例如的值。我的建議是完全刪除case,只使用布爾邏輯。事情是這樣的:

select a.* 
from user_fullinfo a left join 
    profileview b 
    on (a.id = b.rid and b.rid = '105' and b.block = 'False') or 
     (not (a.id = b.rid and b.rid = '105' and b.block = 'False') and 
      gender <> 'Male' and (datediff(year, dob, getdate()) Between 10 and 100) and 
      (a.heightid between 58 and 65) and 
      (a.complexionid in (3, 4, 5)) and 
      a.bodytypeid = 4 and a.marital_statusid = 3 
     ); 

注:

  • 在SQL SQL不平等的標準是<>,雖然!=也被廣泛接受。
  • 不要在數字常量周圍使用單引號。 between '10' and '100'between 10 and 100不一樣。
  • 我懷疑,這個版本還是您case版本確實你想要什麼。對於第二種情況,兩個表之間沒有相關性。

這應該解決你的語法的問題。邏輯問題是一個不同的問題。我建議你詢問另一個問題,包括樣本數據,期望值,結果和對邏輯的解釋。

+0

Ok.I將使用此method..thanks .. –

+0

如果這是正確的,請不要忘記,以紀念這是公認的答案。 – Charlesliam

+0

其不正確我將使用此方法.. –

0

正弦你的case語句只有1個條件,你可以使用直接連接,而不是像下面

SELECT 
    a.* 
    FROM user_fullinfo a 
     LEFT JOIN profileview b 
      ON a.id = b.rid 
       AND b.rid ='105' 
       AND b.block ='False' 
     WHERE gender <> 'Male' 
      AND (DATEDIFF(YY,dob,GETDATE()) BETWEEN '10' AND '100') 
      AND (a.heightid between 58 and 65) 
      AND 
      (
       a.complexionid = '3' 
       OR 
       a.complexionid = '4' 
       OR 
       a.complexionid = '5' 
      ) 
      AND a.bodytypeid = '4' 
      AND a.marital_statusid = '3' 

如果您有任何其他case語句,你需要添加你可以改變像聲明這

ON 
(
    (
    a.id = b.rid 
    AND b.rid ='105' 
    AND b.block ='False' 
) 
    OR 
    (
    a.id = b.rid 
    AND b.rid ='105' 
    AND b.block ='True' 
) 
)