2017-04-05 1 views
0

이 SQL에서는"ON "절을 체크하고 싶습니다. b.block = 'False'입니다. 때때로"profileview "테이블 값이 비어 있기 때문에 그냥 원하는 경우 user_fullinfo 잘못된 : 값은 다음과 같은 것이 표시되어야 프로필보기 않고있을 경우 값Sql 오류는 "incorrect syntax"= "

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)라고,이 조건 b.block = '거짓'그것이 있어야 디스플레이 profileview에 일치 구문 근처에 "=".. 해답을주세요.

+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

좋습니다.이 방법을 사용합니다. 감사합니다. –

+0

이것이 맞으면 이것을 대답으로 표시하는 것을 잊지 마십시오. – Charlesliam

+0

그것의 정확한 나는이 방법을 사용할 것이다 .. –

0

사인 당신이 경우 문에서 단 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' 

아래 당신이 같은 진술를 ON으로 변경 될 수 있습니다 추가 할 필요가 다른 경우 문을 대신 같은 조인을 사용 할 수 있습니다 이

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