SQL Server - Problema al unir dos consultas por ser demasiado complejo

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido su posición en 8 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema al unir dos consultas por ser demasiado complejo

Publicado por Adrián (4 intervenciones) el 24/07/2018 12:08:06
Hola, ayer abrí este post, en el cuál ya lo logré pero ahora me encuentro con otro problema. La consulta que yo quiero hacer es unir un resultado de una consulta, con otro de otra consulta (hago hincapié al post que abrí).

Yo tengo esta consulta, en el cuál me devuelve un resultado de un sólo registro:

1
SELECT * FROM AquActivacion WHERE id=1715092513;

Después, tengo esta otra consulta que me devuelve cierta cantidad de registros dependiendo de la fecha de inicio/final y cómo se puede apreciar es muy compleja a diferencia de la anterior:
1
2
3
4
5
SELECT id, numEntrada, usuario, hora, numFactura, numTicket, numReserva FROM AquInternet WHERE
(dia BETWEEN '17/07/2018' AND '24/07/2018') AND utilizada= 1 UNION ALL SELECT AE.id, AE.numEntrada,
AE.usuario, AE.hora, AA.numFactura, AA.numTicket, AA.numReserva FROM AquActivacion AA
INNER JOIN AquEntrada AE ON AA.id = AE.id WHERE (AE.dia BETWEEN '17/07/2018' AND
'24/07/2018') AND (AE.utilizada= 1) ORDER BY id, numEntrada

Ahora, para unir el resultado de ambas consultas, he intentado usar el siguiente código:

1
2
3
4
5
SELECT AA.observacion, AI.id, AI.numEntrada, AI.usuario, AI.hora, AI.numFactura, AI.numTicket, AI.numReserva FROM AquActivacion AA, AquInternet AI WHERE AA.id=1715092513 AND
(AI.dia BETWEEN '17/07/2018' AND '24/07/2018') AND AI.utilizada= 1 UNION ALL SELECT AA.observacion, AE.id, AE.numEntrada,
AE.usuario, AE.hora, AA.numFactura, AA.numTicket, AA.numReserva FROM AquActivacion AA
INNER JOIN AquEntrada AE ON AA.id = AE.id WHERE (AE.dia BETWEEN '17/07/2018' AND
'24/07/2018') AND (AE.utilizada = 1) ORDER BY AI.id, AI.numEntrada;

(He puesto en cursiva el código de la primera consulta para que podáis verlo mejor).

¿Cuál es el problema? Pues que cuando ejecuto ese código, la segunda consulta devuelve los resultados correctamente, sin embargo la primera que me debería devolver un sólo registro no funciona. Es decir, en el campo observación me está mostrando datos que no debería y es cómo si el
1
WHERE AA.id=1715092513
se lo comiera a pesar de que ya lo puse (debería mostrar el campo de hacer el WHERE para todos los registros de la segunda consulta).

Espero haberme explicado bien, gracias de antemano!
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 Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema al unir dos consultas por ser demasiado complejo

Publicado por Isaias (4557 intervenciones) el 30/07/2018 18:50:56
Si ambas consultas le devuelven el resultado esperado y lo unico que desea es UNIR esos dos resultados obtenidos

SELECT .........(BLA, BLA, BLA)
UNION
SELECT .........(BLA, BLA, BLA)

Solo tomar en cuenta que los campos mencionados en el SELECT, deben ser iguales en ambas consultas.
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 Panchove
Val: 73
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema al unir dos consultas por ser demasiado complejo

Publicado por Panchove (29 intervenciones) el 31/07/2018 17:38:51
El problema es que te falta un INNER JOIN en la primera sentencia SELECT

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
26
27
28
29
30
31
SELECT
	AA.observacion,
	AI.id,
	AI.numEntrada,
	AI.usuario,
	AI.hora,
	AI.numFactura,
	AI.numTicket,
	AI.numReserva
FROM AquActivacion AA, AquInternet AI
INNJER JOIN <CONDICION>
WHERE AA.id=1715092513
	AND (AI.dia BETWEEN '17/07/2018' AND '24/07/2018')
	AND AI.utilizada= 1
 
UNION ALL
 
SELECT
	AA.observacion,
	AE.id,
	AE.numEntrada,
	AE.usuario,
	AE.hora,
	AA.numFactura,
	AA.numTicket,
	AA.numReserva
FROM AquActivacion AA
INNER JOIN AquEntrada AE ON AA.id = AE.id
WHERE AE.dia BETWEEN '17/07/2018' AND '24/07/2018'
	AND AE.utilizada = 1
	ORDER BY AI.id, AI.numEntrada;

Saludos
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