'How do I join two queries in SQL using UNION ALL operation?

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).

sql


Solution 1:[1]

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

Solution 2:[2]

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

Solution 3:[3]

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 

Solution 4:[4]

"order by" is not supported before "union all". Hope it is 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 ;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 FlexYourData
Solution 2 jarlh
Solution 3 jarlh
Solution 4 Gunnar Bernstein