Ver Mensaje Individual
  #7  
Antiguo 16-04-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Reputación: 21
AzidRain Va camino a la fama
Aqui tienes una "receta" de MySQL CookBook que puedes aplicar a FB


Tenemos dos tablas: artistas y pinturas.
Determinemos que qu artistas no se encuentran en la tabla pinturas. En este ejemplo las tablas son pequeñas asi que es facil determinar eso visualmente, podemos ver que no hay pinturas de Monet y Picaso (no hay registros en pinturas con un valor de a_id de 2 o 4)

Código SQL [-]
mysql> SELECT * FROM artist ORDER BY a_id;
Código:
+------+----------+
| a_id | name |
+------+----------+
| 1 | Da Vinci |
| 2 | Monet |
| 3 | Van Gogh |
| 4 | Picasso |
| 5 | Renoir |
+------+----------+

Código SQL [-]
SELECT * FROM painting ORDER BY a_id, p_id;
Código:
+------+------+-------------------+-------+-------+
| a_id | p_id | title | state | price |
+------+------+-------------------+-------+-------+
| 1 | 1 | The Last Supper | IN | 34 |
| 1 | 2 | The Mona Lisa | MI | 87 |
| 3 | 3 | Starry Night | KY | 48 |
| 3 | 4 | The Potato Eaters | KY | 67 |
| 3 | 5 | The Rocks | IA | 33 |
| 5 | 6 | Les Deux Soeurs | NE | 64 |
+------+------+-------------------+-------+-------+
Haciendo un left join asi
Supongamos que hacemos
Código SQL [-]
SELECT * FROM artist LEFT JOIN painting
   ON artist.a_id = painting.a_id;
Ejemplo:
Obtenemos una tabla de pinturas con sus artistas
Código:
+------+----------+------+------+-------------------+-------+-------+
| a_id | name | a_id | p_id | title | state | price |
+------+----------+------+------+-------------------+-------+-------+
| 1 | Da Vinci | 1 | 1 | The Last Supper | IN | 34 |
| 1 | Da Vinci | 1 | 2 | The Mona Lisa | MI | 87 |
| 2 | Monet | NULL | NULL | NULL | NULL | NULL |
| 3 | Van Gogh | 3 | 3 | Starry Night | KY | 48 |
| 3 | Van Gogh | 3 | 4 | The Potato Eaters | KY | 67 |
| 3 | Van Gogh | 3 | 5 | The Rocks | IA | 33 |
| 4 | Picasso | NULL | NULL | NULL | NULL | NULL |
| 5 | Renoir | 5 | 6 | Les Deux Soeurs | NE | 64 |
+------+----------+------+------+-------------------+-------+-------+
La tabla es similar a la que se obtiene con un join normal, solo que en este caso tambien produce una fila para cada artista que no tiene pinturas que correspondan en la tabla "pinturas". Por ello las columnas correspondientes a la tabla "pinturas" aparecen con nulos.

Ahora restringimos solo las columnas que no se encontraron y agregamos un
WHERE que busque solo los valores Nulos para la columna "pintura"

Código SQL [-]
SELECT * FROM artist LEFT JOIN painting
 ON artist.a_id = painting.a_id
WHERE painting.a_id IS NULL;
Código:
+------+---------+------+------+-------+-------+
| a_id | name | a_id | p_id | title | price |
+------+---------+------+------+-------+-------+
| 2 | Monet | NULL | NULL | NULL | NULL |
| 4 | Picasso | NULL | NULL | NULL | NULL |
+------+---------+------+------+-------+-------+
Finalmente para mosotrar solo los valores de la tabla artistas que no estan en la tabla pinturas, ordenamos las columnas para incluir solo las columnras de la tabla artistas


Código SQL [-]
mysql> SELECT artist.* FROM artist LEFT JOIN painting
-> ON artist.a_id = painting.a_id
-> WHERE painting.a_id IS NULL;
Código:
+------+---------+
| a_id | name |
+------+---------+
| 2 | Monet |
| 4 | Picasso |
+------+---------+
Lo mismo se aplica para el ejemplo que quieres hacer, saber que registros no se encuentran en otra tabla. Solo sigue l ejemplo, razónalo y veras que es sencillo
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita