2011-06-15 31 views
6

¿Hay una manera rápida de insertar valores múltiples en una columna mientras que la segunda columna tiene un valor diferente?SQL Insertar varias filas con una columna siempre la misma y una columna diferente

Supongo que tengo dos columnas llamadas Number y Colour. La columna Number siempre va a ser 1 y la columna Colour cambia.

En el momento que estoy haciendo lo siguiente ...

INSERT INTO ColourTable(Number, Colour) 

SELECT '1' ,'red' 

UNION ALL 

SELECT '1' ,'yellow' 

UNION ALL 

SELECT '1' ,'green' 

UNION ALL 

SELECT '1' ,'blue' 

UNION ALL 

SELECT '1' ,'orange' 

que está bien si sólo hay unos insertos que hacer, pero el problema es que necesito para insertar unos 100 filas con la columna de color cambiando y me preguntaba si había una manera de configurar la columna numérica?

** Creo que necesito para explicar a mí mismo un poco mejor ...

decir las columnas de color tienen 40 colores diferentes que necesito para insertar estos colores en diferentes filas con la columna del número diciendo por ejemplo 1 a 100 (el número en realidad son códigos randon por lo que el incremento no funcionará).

por lo que tengo que hacer 40 inserciones de las filas de color con el número de columna = 1 40 inserciones con el número de columna = 2 40 inserciones con el número de columna = 3 y así sucesivamente a 100

+2

Cuando es usted que consigue los valores para la columna de color? ¿Eso está almacenado en otra mesa? – codingbadger

Respuesta

2

Si estoy entendiendo la pregunta correctamente, entonces usted está buscando todas las combinaciones de su campo de código aleatorio y campo de color

Entonces, por ejemplo, si tiene tres colores rojo, verde y azul y 3 códigos aleatorios 1, 14, 25, entonces le gustaría el siguiente conjunto.

1 red 
1 green 
1 blue 
14 red 
14 green 
14 blue 
25 red 
25 green 
25 blue 

Si este es el caso, entonces se podría producir un par de mesas, una con los códigos, la otra con los colores

CREATE TABLE #Codes(
    [CodeNumber] int NOT NULL 
) 

Insert Into #Codes 
Select 1 
Union All 
Select 14 
Union All 
Select 25 



CREATE TABLE #Colours(
    [Colour] varchar(50) NOT NULL 
) 

Insert Into #Colours 
Select 'red' 
Union All 
Select 'green' 
Union All 
Select 'blue' 

continuación, utilice una combinación cruzada para devolver todas las combinaciones.

Select cd.CodeNumber, cl.Colour 
From #Codes cd 
    Cross Join #Colours cl 
+0

Hola gracias que parece funcionar – anna

0

Tal vez podría establecer el valor DEFAULT de la columna Number en 1 antes de insertar sus filas, y eliminarlo después?

+0

Disculpe, la columna numérica cambiará pero solo después de 40 inserciones ... así que tendré un número diferente pero solo lo cambiaré de vez en cuando mientras que la columna de color tiene que cambiar cada vez ... espero que tenga sentido. – anna

+0

En este caso, puede usar un bucle anidado (en php, por ejemplo): el bucle externo para valores numéricos y el interno para valores de color. – patapizza

+0

@barry Hola, Barry, vienen de otra mesa ... pero es realmente la columna numérica que quiero arreglar y solo cambiar una vez para hacer varias columnas – anna

1

ponerlos en subselects separadas, y permiten una combinación cruzada (,) que se produzca:

INSERT INTO ColourTable(Number, Colour) 
SELECT Num.n,Col.c FROM 
(select '1') Num(n), 

(select 'red' union all 
    select 'yellow' union all 
    select 'green' union all 
    select 'blue' union all 
    select 'orange') Col(c) 
0
INSERT INTO ColourTable(Number, Colour) 
SELECT '1' , Col.c FROM 
(select 'red' union all 
    select 'yellow' union all 
    select 'green' union all 
    select 'blue' union all 
    select 'orange') Col(c) 
Cuestiones relacionadas