Мне любопытно узнать, возможно ли это на самом деле ...
В этом упрощенном примере у меня есть:
Table_A: Table_B:
+------+--------+ +------+--------+
| id | data_1 | | id | data_2 |
+------+--------+ +------+--------+
| 1 | Hello | | 1 | There |
+------+--------+ +------+--------+
| 2 | Hi |
+------+--------+
MySQL View (CREATE VIEW...
) с именем tables
:
SELECT table_a.id AS id,
table_a.data_1 AS data_1,
table_b.data_2 AS data_2
FROM table_a
LEFT JOIN table_b
ON table_a.id=table_b.id
Итак, простое SELECT * FROM tables
вернет:
+------+--------+--------+
| id | data_1 | data_2 |
+------+--------+--------+
| 1 | Hello | There |
+------+--------+--------+
| 2 | Hi | NULL |
+------+--------+--------+
Обновление существующих данных в порядке. Т.е., UPDATE tables SET data_2='World' WHERE id=1
завершается, и результат для идентификатора 1 будет:
+------+--------+--------+
| id | data_1 | data_2 |
+------+--------+--------+
| 1 | Hello | World |
+------+--------+--------+
Но как насчет использования оператора UPDATE
в правой таблице (table_b
), если в нем нет данных, соответствующих идентификатору? Используя тот же пример, что и ранее, UPDATE tables SET data_2='John' WHERE id=2
приведет к совпадению 0 строк (и, следовательно, tables
по-прежнему будет возвращать NULL
вместо John
в поле data_2
).
+------+--------+--------+
| id | data_1 | data_2 |
+------+--------+--------+
| 2 | Hi | NULL |
+------+--------+--------+
Есть ли способ заставить эту работу работать в представлении tables
, не касаясь непосредственно table_b
?