Home > Mobile >  How do I join two queries in SQL using UNION ALL operation?
How do I join two queries in SQL using UNION ALL operation?

Time:02-10

everyone.

This is my first query

SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.apellidos_Autor DESC ;

And this is my second query

SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.nombres_Autor ASC ;

So, I just want to know what do I have to do to join these queries using UNION ALL (and not any JOIN operator). Cz the next is not working for me.

SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.apellidos_Autor DESC
UNION ALL
SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.nombres_Autor ASC ;

Thank u'all, community. (I really appreciate any kind of feedback).

CodePudding user response:

Remove the ORDER BY from the top query.

This will error:

SELECT 1 AS i
ORDER BY i
UNION ALL
SELECT 2 AS i
ORDER BY i

This will not:

SELECT 1 AS i
UNION ALL
SELECT 2 AS i
ORDER BY i

CodePudding user response:

Before union all order by is not supported. Hope it working for you.

SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND
AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
UNION ALL
SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.nombres_Autor ASC ;

CodePudding user response:

Its not possible to use two different order by in Union and union all statements. Alternatively it can achieved in the following way.

USE tempdb ; 

CREATE TABLE t1 (ID INT, Col1 VARCHAR(100)); 
CREATE TABLE t2 (ID INT, Col1 VARCHAR(100));  
INSERT INTO t1 (ID, Col1) SELECT 1, 'Col1-t1' UNION ALL SELECT 2, 'Col2-t1' UNION ALL SELECT 3, 'Col3-t1'; 
INSERT INTO t2 (ID, Col1) SELECT 3, 'Col1-t2' UNION ALL SELECT 2, 'Col2-t2' UNION ALL SELECT 1, 'Col3-t2';

SELECT result1.* FROM 
    (SELECT top 1000 tblA.ID, tblA.Col1 FROM t1 AS tblA ORDER BY Col1 desc) AS result1 
UNION ALL 
    SELECT tblB.ID, tblB.Col1 FROM t2 AS tblB ORDER BY Col1 asc

 DROP TABLE t1; 
 DROP TABLE t2; 

References:

https://blog.sqlauthority.com/2012/10/30/sql-server-union-all-and-order-by-how-to-order-table-separately-while-using-union-all/

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-union-transact-sql?view=sql-server-ver15

CodePudding user response:

SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.apellidos_Autor DESC 
union all
SELECT A.nombres_Autor,A.apellidos_Autor,A.fechaNacimiento_Autor,A.fechaFallecimiento_Autor,L.nombre_Libro,G.nombre_Genero
FROM Autor A , Libro L , Genero G , Autores_X_Libro AXL
WHERE AXL.codigoAutor_AXL = A.codigo_Autor AND AXL.codigoISBN_AXL = L.codigoISBN AND L.codigoGenero_Libro = G.codigo_Genero
ORDER BY A.nombres_Autor ASC 
  •  Tags:  
  • sql
  • Related