2010-09-29 32 views

Respuesta

51

Si está utilizando combinaciones internas, y su punto de vista contiene todas las columnas de las tablas base, entonces su punto de vista puede ser actualizable. Sin embargo, para una vista actualizable de múltiples tablas, INSERT puede funcionar si se inserta en una sola tabla. Puede dividir su operación de inserción en múltiples instrucciones INSERT.

Es posible que desee echa un vistazo al siguiente artículo para obtener más información sobre el tema:

Consideremos el siguiente ejemplo:

CREATE TABLE table_a (id int, value int); 
CREATE TABLE table_b (id int, ta_id int, value int); 

INSERT INTO table_a VALUES (1, 10); 
INSERT INTO table_a VALUES (2, 20); 
INSERT INTO table_a VALUES (3, 30); 

INSERT INTO table_b VALUES (1, 1, 100); 
INSERT INTO table_b VALUES (2, 1, 200); 
INSERT INTO table_b VALUES (3, 2, 300); 
INSERT INTO table_b VALUES (4, 2, 400); 

Ahora vamos a crear una vista :

CREATE VIEW v AS 
    SELECT  a.id a_id, b.id b_id, b.ta_id, a.value v1, b.value v2 
    FROM  table_a a 
    INNER JOIN table_b b ON (b.ta_id = a.id); 

SELECT * FROM v; 
+------+------+-------+------+------+ 
| a_id | b_id | ta_id | v1 | v2 | 
+------+------+-------+------+------+ 
| 1 | 1 |  1 | 10 | 100 | 
| 1 | 2 |  1 | 10 | 200 | 
| 2 | 3 |  2 | 20 | 300 | 
| 2 | 4 |  2 | 20 | 400 | 
+------+------+-------+------+------+ 
4 rows in set (0.00 sec) 

La siguiente INSERT falla:

INSERT INTO v (a_id, b_id, ta_id, v1, v2) VALUES (3, 5, 3, 30, 500); 
-- ERROR 1393 (HY000): Can not modify more than one base table through a join view 

pero podemos dividirlo en dos operaciones:

INSERT INTO v (a_id, v1) VALUES (3, 30); 
-- Query OK, 1 row affected (0.00 sec) 
INSERT INTO v (b_id, ta_id, v2) VALUES (5, 3, 500); 
-- Query OK, 1 row affected (0.00 sec) 

Resultado:

SELECT * FROM v; 
+------+------+-------+------+------+ 
| a_id | b_id | ta_id | v1 | v2 | 
+------+------+-------+------+------+ 
| 1 | 1 |  1 | 10 | 100 | 
| 1 | 2 |  1 | 10 | 200 | 
| 2 | 3 |  2 | 20 | 300 | 
| 2 | 4 |  2 | 20 | 400 | 
| 3 | 5 |  3 | 30 | 500 | 
+------+------+-------+------+------+ 
6 rows in set (0.00 sec) 
+0

hay otra fila que se Mising –

+0

puedo ver que haya eliminado la fila de arriba, como se dice 6 filas mientras que usted tiene sólo 5 above.I también estoy enfrentando el mismo problema –

+0

Es muy importante tener una mirada en el artículo enlazado. Gracias. –

Cuestiones relacionadas