2017-04-05 13 views
0

このSQLでは" ON "節b.block = 'False'をチェックしたいと思っています。いつか" profileview "テーブルの値が空になる 私はちょうどuser_fullinfo値は、それを表示する必要があり、この条件b.block =「偽」でprofileviewに一致した値は、プロファイルビューに存在しない場合は、その後もそれが表示する必要があり、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

join条件はどこですか? –

答えて

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バージョンが本当にあなたが望むことをしているのか疑いがあります。第2の条件については、2つのテーブル間に相関はない。

これはの構文の問題を解決するはずです。論理的な問題は別の問題です。 もう1つ質問のサンプルデータ、希望、結果、およびロジックの説明をお願いします。

+0

OK.Iはこの方法を使用します。感謝.. –

+0

これが正しい場合、これを受け入れられた答えとしてマークすることを忘れないでください。 – Charlesliam

+0

それは正しくない私はこのメソッドを使用します.. –

0

サインあなたがcase文には1つだけの条件を持って、あなたはあなたが好きONステートメントを変更することが追加する必要があり、他のcase文を持っている場合には代わりに

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' 

以下のように参加ダイレクトを使用することができますこの

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' 
) 
)