Hola equality_211085, estuve haciendo bastantes pruebas sobre el planteamiento de tu problema, y lo único que se me ocurre es que hagas dos consultas distitas y desde el lenguaje de programación unas los resultados, (No te digo que no se pueda hacer todo desde SQL, solo te digo que yo no lo logré hacer como tu quieres).
Primero te muestro la estructura de las tablas con los registros que le agregé:
Código sql:
Ver originalSELECT * FROM marc;
idmarc | titulomarc | descripcionmarc | ejemplo | codmarc
--------+------------+-----------------+---------+-----------
1 | Primero | Libros | | 000000001
2 | Segundo | Revistas | | 000000002
3 | Tercero | Multimedia | | 000000003
(3 filas)
SELECT * FROM tipomaterial;
idtipomaterial | descripcion
----------------+-------------
1 | Libros
2 | Revistas
3 | Multimedia
(3 filas)
SELECT * FROM marcmaterial;
idtipomaterial | idmarc
----------------+--------
1 | 1
3 | 1
3 | 2
(3 filas)
Ahora la consulta que me devuelve todos los registros de la tabla marc que no tienen asignado un tipo de material:
Código SQL:
Ver originalSELECT marc.idmarc AS "Marca", marc.codmarc, marc.titulomarc
FROM marc
RIGHT JOIN marcmaterial ON marcmaterial.idmarc <> marc.idmarc LEFT JOIN tipomaterial ON tipomaterial.idtipomaterial = marcmaterial.idtipomaterial
ORDER BY marc.idmarc;
Marca | codmarc | titulomarc
-------+-----------+------------
1 | 000000001 | Primero
2 | 000000002 | Segundo
2 | 000000002 | Segundo
3 | 000000003 | Tercero
3 | 000000003 | Tercero
3 | 000000003 | Tercero
(6 filas)
Si te fijas bien, la consulta de aquí arriba me devuelve las tuplas de la tabla marc que no se le han asignado un idtipomaterial.
Pero ahora para mostrar los idtipomaterial correspondientes hice la siguiente consulta por separado:
Código SQL:
Ver originalSELECT tipomaterial.idtipomaterial AS "Tipo"
FROM marc
RIGHT JOIN marcmaterial ON marcmaterial.idmarc = marc.idmarc LEFT JOIN
tipomaterial ON tipomaterial.idtipomaterial <> marcmaterial.idtipomaterial
ORDER BY marc.idmarc;
Tipo
------
2
3
1
2
1
2
(6 filas)
De nuevo, si te fijas, la consulta ha devuelto los idtipomaterial que se le falta por asignar a los idmarc, ambas consultas los ordené con el mismo patrón, (marc.idmar), así el "1" devuelto por marc corresponda al "2" del tipomaterial.
La unión de los resultados los puedes tratar programáticamente desde el lenguaje que estés usando.
Intenté varias combinaciones, incluido "union", pero devuelven muchas tuplas, y para este caso, (me refiero a los registros que inserté y su combinación en la relación marcmaterial), no me sirvió ninguna, si quieres te explico el porque, pero después, si veo que necesitas más ayuda, porque esta respuesta se hace demasiado larga y no es la idea.
Perdona que esté tan complicado, seguramente huesos o algún otro miembro del foro te pueda aconsejar mejor, mientras y si quieres puedes ir probando con mi opción.
Saludos.