2012-09-11 24 views
11

Ecco il mio codice:MySql INNER JOIN con clausola 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' 

Ho bisogno di informazioni da table1 come tutta l'id associato con f_com_id come 430 e lo stato come presentato e il tipo dovrebbe essere solo nel processo che è memorizzato nell'altra tabella (table2)

f_id è p_key e f_key in entrambi i tavoli.
Ma questo mi dà errori, penso che sto ponendo la clausola WHERE errata, come risolverlo.?

Errore msg: # 1064 - Si è verificato un errore nella sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare vicino a 'INNER JOIN table2 ON table2.f_id =' at line 2

+0

Quasi 80k visualizzazioni, ~ 12 voti su domanda e risposta con 25+ voti. Sicuramente non troppo localizzato. – hims056

+0

Un errore di sintassi molto popolare, sì. Forse non troppo localizzato, ma comunque non pertinente, come gli altri errori di sintassi. –

risposta

26

Sì hai ragione. Hai inserito la clausola WHERE errata. È possibile utilizzare un solo WHERE clausola singola query in modo da provare AND per le condizioni più come questo:

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 a lot..it ha funzionato per me .. ma quello che sento è che le operazioni JOIN sono sempre un approccio costiero, possiamo farlo in un altro modo senza usare l'operando di join. se possibile? –

+1

@AdityaKumar Join è un approccio migliore rispetto ad altri (ad esempio sotto-query, ecc.). Preferisci iscriverti Vedi [questo SQLFiddle] (http://sqlfiddle.com/#!3/3db23/3). – hims056

1

Si potrebbe scrivere una sola clausola 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. Modificare l'INNER JOIN prima della clausola WHERE.
2. Sono disponibili due WHERE che non sono consentiti.

Prova questo:

 
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

Si utilizza due clausole WHERE ma solo uno è permesso. Usalo in questo modo:

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'