Firebird - Mix Records di due diverse tabelle
-
28-10-2019 - |
Domanda
Sto cercando un modo per risolvere il mio problema SQL.
Ho 2 tavoli in Firebird 2.5 (T1 e T2) come questi:
T1 (
T1_ID INTEGER,
T1_DAY DATE,
T1_NAME VARCHAR(200)
)
T2 (
T2_ID INTEGER,
T2_DAY DATE,
T2_NAME VARCHAR(200)
)
E ho bisogno di una domanda che mescola i record di quelle tabelle e li ordina nell'ordine della data ASC. Non mi interessa se una query di join aumenta il numero di campi o il campo della data non è lo stesso del risultato o sono necessarie procedure memorizzate.
output ad es
T1_ID T1_DAY T1_NAME T2_ID T2_DAY T2_NAME
---------------------------------------------------
1 01/02/2011 BOB NULL NULL NULL
2 27/02/2011 SAM NULL NULL NULL
NULL NULL NULL 8 15/03/2011 PETER
NULL NULL NULL 10 21/03/2011 JOHN
6 17/04/2011 AMY NULL NULL NULL
o (output migliore)
ID DAY NAME
-------------------------
1 01/02/2011 BOB
2 27/02/2011 SAM
8 15/03/2011 PETER
10 21/03/2011 JOHN
6 17/04/2011 AMY
Come il mio primo post su stackoverflow.com (anche se l'ho seguito in passato) voglio ringraziarvi per qualsiasi risposta alla mia domanda e grazie a tutti per aver creato e aiutare questa bellissima comunità!
Distinti saluti
Francesco
Soluzione
Vuoi il UNION
operatore:
SELECT
T1.T1_ID ID,
T1.T1_DAY DAY,
T1.T1_NAME NAME
FROM
T1
UNION
SELECT
T2.T2_ID,
T2.T2_DAY
T2.T2_NAME
FROM
T2
;
Puoi fare in modo che le singole selezioni abbiano ulteriori funzionalità che ti piacciono. L'unica restrizione è che tutte le colonne in entrambi gli elenchi di selezione sono nello stesso ordine e hanno lo stesso tipo (sono "compatibili dall'unione"). Le righe risultanti avranno intestazioni di colonne come la prima selezione.
modificare: Per controllare l'ordinamento di un sindacato, dovrai fare l'unione in una sottospezione e l'ordinamento nella query esterna.
SELECT u.ID, u.DAY, u.NAME
FROM (
SELECT T1.T1_ID ID, T1.T1_DAY DAY, T1.T1_NAME NAME
FROM T1
UNION
SELECT T2.T2_ID, T2.T2_DAY T2.T2_NAME
FROM T2
) u
ORDER BY u.NAME;