2012-09-11 26 views
11

Aquí está mi código:MySql combinación interna con la cláusula 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' 

Necesito información de table1 como todo el ID asociado f_com_id como 430 y el estado tal como fue presentado y el tipo debe ser sólo en el proceso que se almacena en otra tabla (table2)

f_id es p_key y f_key en ambas tablas.
Pero esto me da errores, creo que estoy colocando la cláusula WHERE incorrecta, cómo solucionarlo.?

Mensaje de error: # 1064 - Tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'INNER JOIN tabla2 EN table2.f_id =' en la línea 2

+0

Casi 80k vistas, ~ 12 votos sobre preguntas y respuestas con más de 25 votos. Seguramente no muy localizado. – hims056

+0

Un error de sintaxis muy popular, sí. Posiblemente no demasiado localizado, pero fuera de tema, sin embargo, como los otros errores de sintaxis. –

Respuesta

26

Si usted tiene razón. Usted ha colocado la cláusula WHERE incorrecta. Sólo se puede utilizar una cláusula en WHERE sola consulta a fin de tratar AND para múltiples condiciones como esta:

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

mucho ... me funcionó ... pero lo que siento es que las operaciones de JOIN son siempre un enfoque más costoso, ¿podemos hacerlo de otra manera sin usar join opertaion? ¿si es posible? –

+1

@AdityaKumar Unir es un mejor enfoque que otros (por ejemplo, subconsulta, etc.). Prefiero unirse Ver [este SQLFiddle] (http://sqlfiddle.com/#!3/3db23/3). – hims056

1

sólo se puede escribir una cláusula 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. Cambio en la unión interna antes de la cláusula WHERE.
2. Tiene dos WHEREEs que no está permitido.

Prueba esto:

 
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

Está utilizando dos cláusulas WHERE pero sólo se permite una. Úselo así:

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'