2012-09-11 1 views
11
여기

내 코드입니다 WHERE에 가입 :MySQL의 내부 절

제출 유형 만 저장되는 과정에 있어야합니다 나는 430로 f_com_id 및 상태와 관련된 모든 ID로 table1에서 정보가 필요
SELECT table1.f_id FROM table1 WHERE table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table2.f_type = 'InProcess' 

다른 테이블 (table2)

f_idp_keyf_key이다.
그러나이 오류는 나에게 WHERE 절을 잘못 배치하고 있다고 생각합니다. 어떻게 수정해야합니까?

오류 메시지 : # 1064 - SQL 구문에 오류가 있습니다.

+0

약 80k 회의 조회, 25 회 이상 투표에서 12 회 투표. 확실히 너무 현지화되지 않았습니다. – hims056

+0

매우 일반적인 구문 오류입니다. 예. 그럼에도 불구하고 다른 지역 문법 오류와 같이 너무 지역화되지는 않았지만 주제는 아닐 수도 있습니다. –

답변

26

예 당신이 옳다 라인 2에서 '= table2.f_id ON 표 2 가입 INNER'근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인. WHERE 절을 잘못 넣었습니다. 당신은 지금과 같은 여러 조건에 대한 AND을 시도 단일 쿼리에서 하나 WHERE 절을 사용할 수 있습니다 :

SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON table2.f_id = table1.f_id 
WHERE table2.f_type = 'InProcess' 
    AND f_com_id = '430' 
    AND f_status = 'Submitted' 
+1

thnx 많이 .. 나를 위해 일했다 ..하지만 내가 느끼는 것은 JOIN 작업이 항상 비용이 많이 드는 방법이며, join opertaion을 사용하여 다른 방법으로이 작업을 수행 할 수 있습니까? 가능하다면? –

+1

@AdityaKumar Join은 다른 것보다 나은 접근 방법입니다 (예 : 하위 쿼리 등). 조인을 선호하십시오. [this SQLFiddle] (http://sqlfiddle.com/#!3/3db23/3)을 참조하십시오. – hims056

1

당신은 where 절을 작성할 수 있습니다. 내부는 WHERE 절 전에 가입

SELECT table1.f_id FROM table1 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' AND table2.f_type = 'InProcess' 
4


1. 변경합니다.
2. 허용되지 않는 두 가지 WHERE가 있습니다.

이 시도 : 두 WHERE 절을 사용하고 있지만 하나만 허용

 
SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON (table2.f_id = table1.f_id AND table2.f_type = 'InProcess') 
    WHERE table1.f_com_id = '430' AND table1.f_status = 'Submitted' 
-2

. 다음과 같이 사용하십시오 :

SELECT table1.f_id FROM table1 
INNER JOIN table2 ON table2.f_id = table1.f_id 
WHERE 
    table1.f_com_id = '430' 
    AND table1.f_status = 'Submitted' 
    AND table2.f_type = 'InProcess'