2012-09-11 11 views
11

Oto mój kod:MySql Inner Join z WHERE

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' 

Potrzebuję informacji od table1 jako wszystkimi ID związanego z f_com_id jako 430 i statusu jako złożony i rodzaju powinny być tylko w procesie, który jest przechowywany w innej tabeli (table2)

f_id to p_key i f_key w obu tabelach.
Ale to daje mi błędy, myślę, że umieszczam klauzulę WHERE źle, jak to naprawić.?

Błąd msg: # 1064 - Wystąpił błąd w składni SQL; sprawdzić podręcznika, który odpowiada twojej wersji serwera MySQL dla prawego składnię używaną w pobliżu „INNER JOIN tabela2 NA table2.f_id =” at line 2

+0

Prawie 80 000 wyświetleń, ~ 12 głosów na pytanie i odpowiedź z ponad 25 głosami. Na pewno niezbyt zlokalizowane. – hims056

+0

Bardzo popularny błąd składniowy, tak. Prawdopodobnie nie są zbyt zlokalizowane, ale nie na temat, podobnie jak inne błędy składniowe. –

Odpowiedz

26

Tak masz rację. Zawarłeś klauzulę WHERE. Można użyć tylko jednego WHERE klauzuli w jednym zapytaniu więc spróbuj AND dla wielu warunków, takich jak ten:

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 dużo ... pracowałem dla mnie .. ale to, co czuję operacja JOIN jest zawsze bardziej kosztownym podejściem, możemy to zrobić w inny sposób bez użycia operacji łączenia. Jeśli to możliwe? –

+1

@AdityaKumar Join to lepsze podejście niż inne (np. Pod-zapytanie itp.). Preferuj dołącz. Zobacz [to SQLFiddle] (http://sqlfiddle.com/#!3/3db23/3). – hims056

1

Można tylko napisać gdzie klauzula.

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. Zmiana INNER JOIN przed klauzuli WHERE.
2. Masz dwa GDZIE, które nie są dozwolone.

Spróbuj tego:

 
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

używasz dwóch WHERE klauzule, ale tylko jeden jest dozwolone. Użyj go tak:

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'