2012-03-01 8 views
13

C'è un modo in MySql per creare una tabella in linea da usare per partecipare?Mysql: Crea tabella in linea all'interno dell'istruzione select?

Qualcosa di simile:

SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT 

che sarebbe uscita

| ID | CONTENT | 
| LONG | VARCHAR(1)| 
+------+-----------+ 
| 1 | 'a' | 
| 2 | 'b' | 
| 3 | 'c' | 

e che potrei usare in un join come questo:

SELECT 
    MyTable.*, 
    MyInlineTable.CONTENT 
FROM 
    MyTable 
    JOIN 
    (SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT MyInlineTable) 
    ON MyTable.ID = MyInlineTable.ID 

mi rendo conto che posso fare

SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' 

Ma che sembra piuttosto male

Non voglio fare una stored procedure in quanto potenzialmente a, b, c può cambiare in ogni query e la dimensione dei dati pure. Anche una stored procedure deve essere salvata nel database e non voglio dover modificare il database solo per quello. La vista è la stessa cosa.

Quello che sto davvero cercando è qualcosa che fa SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' con una sintassi più gradevole.

+0

Sembra un concetto semplice con evidenti casi d'uso. Devo trovare anche qualcosa di simile. –

+0

Hai trovato qualche soluzione? Sono curioso –

+0

@FernandoCarvalhosa: no, sembra che non possa essere fatto senza unione –

risposta

-1

Sì. Fare con stored procedures o views.

+0

Sembra una soluzione troppo pesante per me ... (vedi le modifiche nella domanda) –

4

L'unico modo che posso ricordare ora è utilizzare UNION o creare un TEMPORARY TABLE e inserirvi quei valori. Ti sta bene?


TEMPORARY_TABLE (testata e funziona):

creazione:

CREATE TEMPORARY TABLE MyInlineTable (id LONG, content VARCHAR(1)); 

INSERT INTO MyInlineTable VALUES 
(1, 'a'), 
(2, 'b'), 
(3, 'c'); 

Usage:

SELECT 
    MyTable.*, 
    MyInlineTable.CONTENT 
FROM 
    MyTable 
    JOIN 
    SELECT * FROM MyInlineTable; 
    ON MyTable.ID = MyInlineTable.ID 

TEMPORARY_TABLESvita(reference):

Le tabelle temporanee vengono eliminate automaticamente quando vanno fuori portata, a meno che non siano già stati esplicitamente sceso utilizzando DROP TABLE:

.

Tutte le altre tabelle temporanee locali vengono eliminate automaticamente alla fine della sessione corrente.

.

Le tabelle temporanee globali vengono automaticamente eliminate quando la sessione che ha creato la tabella termina e tutte le altre attività hanno smesso di farvi riferimento.L'associazione tra un'attività e una tabella viene mantenuta solo per la durata di una singola istruzione Transact-SQL. Ciò significa che una tabella temporanea globale viene eliminata al completamento dell'ultima istruzione Transact-SQL che faceva riferimento attivamente alla tabella al termine della sessione di creazione.