2010-04-23 12 views
10

tengo esta consulta en MySQL:combinación izquierda no devolver todas las filas

SELECT pr.*, pr7.value AS `room_price_high` 
FROM `jos_hp_properties` pr 
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id 
WHERE pr7.field=23 

La tabla jos_hp_properties tiene 27 filas, pero la consulta sólo devuelve uno. Basado en this question, creo que puede deberse a la cláusula WHERE. La tabla jos_hp_properties2 tiene campos ID, propiedad, campo, el valor donde field es una clave externa a una tercera tabla (que no necesito para obtener datos de).

¿Hay una manera de seleccionar todas las filas de la primera tabla, incluido el valor de la tabla # 2, donde el campo es de 23 (o NULL si no hay campo 23)?

Respuesta

27

Claro. Mueva la condición WHERE a la JOIN:

SELECT pr.*, pr7.value AS `room_price_high` 
    FROM `jos_hp_properties` pr 
     LEFT JOIN `jos_hp_properties2` pr7 
     ON pr7.property=pr.id 
    AND 
     pr7.field=23 
+0

Gracias! La respuesta en la pregunta he vinculado en realidad explica esto, pero por alguna razón no tenía sentido primera vez que lo leí ... – DisgruntledGoat

+0

gracias bernie su solución salvó la vida – Devjosh

+0

Eres muy bienvenida. – bernie

0

Prueba esto:

SELECT pr.*, pr7.value AS `room_price_high` 
FROM `jos_hp_properties` pr 
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id 
WHERE (pr7.field=23 OR pr7.field is null) 
+0

Esto no es lo óptimo de las consultas - ver las otras respuestas, donde los criterios PR7 se mueven a la unión. –

+0

Sí, vi que cuando yo estaba escribiendo y que debería haber cambiado, pero me sentía perezoso. Esta pregunta me recuerda a todos los programadores que excluyen específicamente filas y luego esperan que reaparezcan mágicamente porque dijeron "unión externa". – MJB

6

Debe colocar los criterios PR7 en la unión, no en la cláusula where. La cláusula where funciona en todo el conjunto de resultados DESPUÉS de que se haya realizado la unión.

SELECT pr.*, pr7.value AS `room_price_high` 
FROM `jos_hp_properties` pr 
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id and pr7.field=23 
Cuestiones relacionadas