Access - Problemas para relacionar un registro con varios

 
Vista:

Problemas para relacionar un registro con varios

Publicado por Federico (1 intervención) el 23/06/2023 20:14:50
Hola, resulta que tengo una tabla de temas musicales donde defino Compositor1 compositor2 compositor3 letrista1 letrista2 y letrista3. Por otro lado una tabla de artistas. Esos artistas pueden aparecer en la tabla de temas como compositor1, 2, 3 o letrista1, 2 o 3.
Cuando quiero ejecutar una consulta donde me aparezcan los nombres asociados a estos 6 campos, (Pueden ser iguales o no, me refiero que el compositor1 puede ser el mismo que el letrista1) me indica que debo hacer una consulta sobre otra consulta, de esta manera en mi primer consulta (llamemosla "Nombre del compositor 1") obtengo el nombre del tema con el nombre del compositor1. Luego hago una nueva consulta tomando como base la consulta anterior en lugar de la tabla a la que llamo "Nombre compositor 1 y 2" y efectivamente obtengo el nombre del tema con los correspondientes nombres de los compositores 1 y 2. Realizo una tercer consulta agregando el 3 compositor y todo ok. El problema es cuando hago la cuarta tabla porque obtengo todo menos el nombre del compositor2. Ya en la quinta tabla, donde aparecerian compositor1,2 y 3, letrista 1 y 2 me da directamente error "Puede que el campo ´Letrista1.Compositor2.Artistas.ArtistaNombreReal´ especificado haga referencia a más de una talba de las mostradas en la cláusula FROM de la instrucción SQL.
La instrucción es: SELECT Letrista1.IdTema, Temas.TemaNombre, Letrista1.NombreGéneroMusical, Temas.IdCompositor1, Letrista1.Compositor1.ArtistaNombreReal, Letrista1.Compositor1.ArtistaApellidoReal, Temas.IdCompositor2, Letrista1.Compositor2.Artistas.ArtistaNombreReal, Letrista1.Compositor2.Artistas.ArtistaApellidoReal, Temas.IdCompositor3, Letrista1.Compositor3.Artistas.ArtistaNombreReal, Letrista1.Compositor3.Artistas.ArtistaApellidoReal, Temas.IdLetrista1, Letrista1.Artistas.ArtistaNombreReal, Letrista1.Artistas.ArtistaApellidoReal, Temas.IdLetrista2, Artistas.ArtistaNombreReal, Artistas.ArtistaApellidoReal
FROM (Artistas RIGHT JOIN Temas ON Artistas.IDArtista = Temas.IdLetrista1) INNER JOIN Letrista1 ON Temas.IdTema = Letrista1.IdTema;
Alguien puede darme una solución? Lo he revisado y rehecho varias veces con el mismo resultado, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Medir

Problemas para relacionar un registro con varios

Publicado por Medir (2 intervenciones) el 26/06/2023 00:51:01
Hola! El problema que estás experimentando se debe a la forma en que estás intentando acceder a los campos de la tabla relacionada en tus consultas. Cuando agregas la cuarta tabla (Compositor2) y posteriormente la quinta tabla (Letrista2), estás tratando de acceder a los campos de la tabla relacionada usando una sintaxis incorrecta.

En lugar de utilizar Letrista1.Compositor2.Artistas.ArtistaNombreReal, deberías utilizar una sintaxis de JOIN adicional para unir la tabla Letrista2 y luego acceder a los campos de esa tabla.

Soluciona eso y ya funcionará. ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Medir

Problemas para relacionar un registro con varios

Publicado por Medir (2 intervenciones) el 26/06/2023 00:52:39
Así deveria funcionar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT
    Letrista1.IdTema,
    Temas.TemaNombre,
    Letrista1.NombreGéneroMusical,
    Temas.IdCompositor1,
    Letrista1.Compositor1.ArtistaNombreReal,
    Letrista1.Compositor1.ArtistaApellidoReal,
    Temas.IdCompositor2,
    Letrista2.Compositor2.ArtistaNombreReal,
    Letrista2.Compositor2.ArtistaApellidoReal,
    Temas.IdCompositor3,
    Letrista2.Compositor3.ArtistaNombreReal,
    Letrista2.Compositor3.ArtistaApellidoReal,
    Temas.IdLetrista1,
    Letrista1.Artistas.ArtistaNombreReal,
    Letrista1.Artistas.ArtistaApellidoReal,
    Temas.IdLetrista2,
    Letrista2.Artistas.ArtistaNombreReal,
    Letrista2.Artistas.ArtistaApellidoReal
FROM
    (
        (Artistas RIGHT JOIN Temas ON Artistas.IDArtista = Temas.IdLetrista1)
        INNER JOIN Letrista1 ON Temas.IdTema = Letrista1.IdTema
    )
    INNER JOIN Letrista2 ON Temas.IdTema = Letrista2.IdTema;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar