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

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top