2012-03-01 20 views
13

¿Hay alguna manera en MySql para crear una tabla en línea para usar para unirse?Mysql: Crear tabla en línea dentro de la instrucción select?

Algo así como:

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

que emitiría

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

y que podría utilizar en una unión como esta:

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 

Soy consciente de que puedo hacer

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

Pero eso parece bastante mal

no quiero hacer un procedimiento almacenado debido potencialmente a, b, c puede cambiar en cada consulta y el tamaño de los datos también. También se debe guardar un procedimiento almacenado en la base de datos, y no quiero tener que modificar la base de datos solo para eso. Ver es lo mismo.

Lo que realmente estoy buscando es algo que hace SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' con una sintaxis más agradable.

+0

Parece un concepto sencillo con casos de uso obvios. Necesito encontrar algo como esto también. –

+0

¿Has encontrado alguna solución? Tengo curiosidad –

+0

@FernandoCarvalhosa: no, parece que no se puede hacer sin unión –

Respuesta

-1

Sí. Hazlo con stored procedures o views.

+0

Me parece una solución demasiado pesada ... (ver ediciones en la pregunta) –

4

La única forma en que puedo recordar ahora es usando UNION o creando un TEMPORARY TABLE e insertando esos valores en él. ¿Te queda bien?


TEMPORARY_TABLE (probado y funciona):

Creación:

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

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

Uso:

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

TEMPORARY_TABLESvida(reference):

tablas temporales se eliminan automáticamente cuando salen del ámbito de aplicación, a menos que ya se han caído de forma explícita el uso de DROP TABLE:

.

Todas las demás tablas temporales locales se eliminan automáticamente al final de la sesión actual.

.

Las tablas temporales globales se eliminan automáticamente cuando finaliza la sesión que creó la tabla y todas las demás tareas dejan de hacer referencia a ellas.La asociación entre una tarea y una tabla se mantiene solo durante la vida de una sola instrucción Transact-SQL. Esto significa que una tabla temporal global se descarta al completar la última instrucción Transact-SQL que hacía referencia activa a la tabla cuando finalizaba la sesión de creación.

Cuestiones relacionadas