Access - LEFT JOIN INCONCLUSO

   
Vista:

LEFT JOIN INCONCLUSO

Publicado por LUIS ENRIQUE (5 intervenciones) el 31/07/2016 12:04:05
Buen día tengo la siguiente consulta.

SELECT Tb_Asignamatricula.MATRICULA
FROM Tb_Asignamatricula
WHERE (((Tb_Asignamatricula.[CLIENTE])=(SELECT DIMINUTIVO FROM Tb_Cliente WHERE (ESTADO="ACTIVADO"))))
ORDER BY Tb_Asignamatricula.[CLIENTE];

En las tabla Tb_Asignamatricula y Tb_Asignacliente los campos Cliente y DIMINUTIVO tienen los mismo valores, el problema es al generar un nuevo cliente y no tener aún matrícula asignada, me genera error "Esta subconsulta puede devolver como máximo un registro"

Intenté con LEFT JOIN e INNER JOIN, pero no me sale la respuesta, que debería ser sólo las matrículas que pertenecen a los clientes(DIMINUTIVO) que se encuentran en la tabla Tb_cliente con el estado "Activado"
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

LEFT JOIN INCONCLUSO

Publicado por Enrique Heliodoro (1663 intervenciones) el 31/07/2016 13:32:03
No veo la posible aplicación de una relación en esa SQL
Tampoco veo claro que se utilice una consulta (que puede devolver 0,1, ... infinitos datos) como parámetro de/para una igualdad.

De hecho, no veo con claridad el propósito de esa consulta (la interpreto como ambigua).
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

LEFT JOIN INCONCLUSO

Publicado por LUIS ENRIQUE (5 intervenciones) el 31/07/2016 19:02:47
Enrique Heliodoro, gracias de antemano por responder,

Colocaré la estructura de las tablas:

Tb_Asignamatricula |
Matricula
Cliente

Tb_Asginacliente
DIMINUTIVO (Tiene el equivalente de Cliente)
ESTADO

Generalmente en la tabla 'Tb_Asignacliente' se registra al cliente ingresante colocándole un estado "ACTIVADO", posteriormente a este se le asigna una matricula, sólo en el caso de que se encuentre "ACTIVADO" el cliente.
Pero el problema ocurre cuando Registro a un cliente, pero aún no le asigno una matricula y hago la consulta de Matriculas para mostrarlas, estás generan un error ''.Esta subconsulta puede devolver como máximo un registro".
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

LEFT JOIN INCONCLUSO

Publicado por LUIS ENRIQUE (5 intervenciones) el 31/07/2016 19:27:21
Terminé

Ejecutando la siguiente sentencia:

1
2
3
4
5
SELECT Tb_Asignamatricula.[MATRICULA]
FROM Tb_Asignamatricula
LEFT JOIN Tb_Cliente
ON (Tb_Asignamatricula.[CLIENTE]=Tb_Cliente.[DIMINUTIVO] AND Tb_Cliente.[ESTADO]="ACTIVADO")
ORDER BY Tb_Asignamatricula.[CLIENTE];

y corrió perfectamente.
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

LEFT JOIN INCONCLUSO

Publicado por Enrique Heliodoro (1663 intervenciones) el 31/07/2016 19:46:08
Creo que los arboles no te dejan ver el bosque ....

Esa condición (que es de lo que Access se queja) carece de sentido ....

Dejémonos de esas extrañas combinaciones del mismo dato con diferentes nombres y analicemos lo que has expuesto:

....
WHERE (((Tb_Asignamatricula.[CLIENTE])=(SELECT DIMINUTIVO FROM Tb_Cliente WHERE (ESTADO="ACTIVADO"))))

Limpiemos la paja:
[CLIENTE] = (SELECT DIMINUTIVO FROM Tb_Cliente WHERE ESTADO="ACTIVADO")

Esto:
SELECT DIMINUTIVO FROM Tb_Cliente WHERE ESTADO="ACTIVADO"

Es en si misma una consulta, consulta que devolverá un subconjunto de datos y si todos los registros están 'activados', devolverá ... si: TODOS los registros o ninguno (un NULL) si ninguno esta 'activado' o la alternativa de todos los que estén 'activados'

Y eso (que puede ser un NULL o una lista indefinida), se utiliza para igualarlo con una UNICA entidad (cliente)

¿Qué tiene que ver una condición con una relación? porque todo lo que esta después del Where es ... una condición, la relación entre dos tablas se efectúa antes de imponer condiciones, observa la clásica relación entre pedidos y detalles de pedidos (tomada de la base de datos Northwind):

SELECT Pedidos.[Fecha de pedido], [Cantidad]*[Precio] AS Importe
FROM Pedidos LEFT JOIN [Detalles de pedido] ON Pedidos.[Id de pedido] = [Detalles de pedido].[Id de pedido]
ORDER BY Pedidos.[Fecha de pedido];
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