Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/01/2015, 17:44
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: join con una vista no muestra los campos null

Vamos a hacer una demostración evidente de que el problema no es la query, sino los datos que tienes, además de la sintaxis algo rebuscada que estás usando...

Supongamos que tenemos estas tablas (simulo con una tabla fija el resultado de la "vista" que tienes):
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS vw_rojof;
  2. Query OK, 0 rows affected (0.16 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS entidad;
  5. Query OK, 0 rows affected (0.06 sec)
  6.  
  7. mysql> CREATE TABLE IF NOT EXISTS entidad (
  8.     ->     nit BIGINT UNSIGNED NOT NULL PRIMARY KEY,
  9.     ->     entidad VARCHAR(50)
  10.     -> );
  11. Query OK, 0 rows affected (0.03 sec)
  12.  
  13. mysql> CREATE TABLE vw_rojof (
  14.     ->     nit BIGINT UNSIGNED NOT NULL PRIMARY KEY,
  15.     ->     total INT UNSIGNED,
  16.     ->     FOREIGN KEY (nit)
  17.     ->         REFERENCES entidad (nit)
  18.     -> );
  19. Query OK, 0 rows affected (0.02 sec)

A estas tablas le agregaremos los registros de entidades:
Código MySQL:
Ver original
  1. mysql> INSERT INTO entidad
  2.     -> VALUES(8909092411, 'BELEN'),
  3.     -> (890981422, 'CREAR'),
  4.     -> (890904833, 'TELEP LTDA.'),
  5.     -> (860013444, 'FONDO ASOCIACIÓN'),
  6.     -> (860014855, 'FONDO IPSE'),
  7.     -> (800210766, 'FONDO COL');
  8. Query OK, 6 rows affected (0.00 sec)
  9. Records: 6  Duplicates: 0  Warnings: 0
Y luego sólo dos registros relacionados en la segunda tabla:
Código MySQL:
Ver original
  1. mysql> INSERT INTO vw_rojof
  2.     -> VALUES(860014855, 1), (800210766, 1);
  3. Query OK, 2 rows affected (0.00 sec)
  4. Records: 2  Duplicates: 0  Warnings: 0

Con eso ejecutaremos exactamente la misma consulta que yo te propuse:
Código MySQL:
Ver original
  1.     ->     e.nit, f.total total, e.entidad
  2.     -> FROM
  3.     ->     entidad e
  4.     ->         LEFT JOIN
  5.     ->     vw_rojof f ON e.nit = f.nit
  6.     -> WHERE
  7.     ->     TRUE OR f.nit IS NULL
  8.     -> ORDER BY e.entidad DESC;

La cual devuelve:
Código MySQL:
Ver original
  1. +------------+-------+------------------+
  2. | nit        | total | entidad          |
  3. +------------+-------+------------------+
  4. |  890904833 |  NULL | TELEP LTDA.      |
  5. |  860014855 |     1 | FONDO IPSE       |
  6. |  800210766 |     1 | FONDO COL        |
  7. |  860013444 |  NULL | FONDO ASOCIACIàN |
  8. |  890981422 |  NULL | CREAR            |
  9. | 8909092411 |  NULL | BELEN            |
  10. +------------+-------+------------------+
  11. 6 rows in set (0.00 sec)
Que es exactamente el resultado que buscas...

Como verás, esa consulta es la correcta. Si no la estás obteniendo es porque las que usas están mal redactadas, o bien los datos no cumplen con lo que dices.

Ahora bien, cuando te pido un set de datos , no me estoy refiriendo a las consultas que hiciste, sino a DATOS REALES QUE TIENE CADA UNA DE LAS TABLAS. El problema que te aqueja debe ser analizado en un contexto real, no teórico, porque es un problema REAL que sólo existe en ese modo...
En la teoría, mi consulta estaba bien, pero sin ver los DATOS REALES, no sé qué es lo que está procesando tu base.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)