У меня есть две таблицы table1 и table2.Table1 генерируется парсером и автоматически обновляется каждые несколько дней.Table2 - отредактированная пользователем версия table1.Если запись существует в таблице 2, это должно перекрывать запись в таблице 1 в представлении.
Любая отредактированная версия в таблице 2 имеет исходное содержимое из таблицы table для Column2 и Column3 в OldColumn2 и OldColumn3 соответственно.Когда пользователь удаляет запись, удаляемый столбец имеет значение 1
, а если пользователь хочет снова добавить запись, он имеет значение 0
для отображения в представлении.По умолчанию значение равно NULL
, если оно никогда не удалялось.
Если новая запись вставлена в table2, OldColumn2 и OldColumn3 имеют значение new
string, чтобы отличить ее в таблице table1..
Вот дизайн моей таблицы.
Table1
+------+------+------+-------------+
| Col1 | Col2 | Col3 | OtherColumns|
+------+------+------+-------------+
| a1 | b1 | c1 | Data |
+------+------+------+-------------+
| a2 | b2 | c2 | Data |
+------+------+------+-------------+
| a3 | b3 | c3 | Data |
+------+------+------+-------------+
| a4 | b4 | c4 | Data |
+------+------+------+-------------+
Table2
+------+------+------+-------------+----------+----------+---------+
| Col1 | Col2 | Col3 | OtherColumns| OldCol2 | OldCol3 | Deleted |
+------+------+------+-------------+----------+----------+---------+
| a1 | e1 | f1 | Data | b1 | c1 | NULL |
+------+------+------+-------------+----------+----------+---------+
| a2 | k2 | m2 | Data | b2 | c2 | 0 |
+------+------+------+-------------+----------+----------+---------+
| a3 | k3 | m3 | Data | b3 | c3 | 1 |
+------+------+------+-------------+----------+----------+---------+
| z1 | kk | jj | Data | new | new | 1 |
+------+------+------+-------------+----------+----------+---------+
| z2 | kj | uu | Data | new | new | 0 |
+------+------+------+-------------+----------+----------+---------+
View
+------+------+------+-------------+----------+----------+---------+
| Col1 | Col2 | Col3 | OtherColumns| OldCol2 | OldCol3 | Deleted |
+------+------+------+-------------+----------+----------+---------+
| a1 | e1 | f1 | Data | b1 | c1 | NULL |
+------+------+------+-------------+----------+----------+---------+
| a2 | k2 | m2 | Data | b2 | c2 | 0 |//Deleted then added
+------+------+------+-------------+----------+----------+---------+
| a4 | k4 | j4 | Data | NULL | NULL | 0 |
+------+------+------+-------------+----------+----------+---------+
| z2 | kj | uu | Data | new | new | 0 |
+------+------+------+-------------+----------+----------+---------+
Вот мой оператор представления.
CREATE VIEW NEWVIEW
AS
SELECT t2.* FROM table1 t1
LEFT JOIN table2 t2
ON t1.column1 = t2.column1 AND t1.column2 = t2.oldColumn2 AND t1.column3 = t2.oldColumn3
WHERE t2.column1 IS NOT NULL AND t2.Deleted = 0
UNION
SELECT t1.*, null, null, null FROM table1 t1
LEFT JOIN table2 t2
ON t1.column1 = t2.column1 AND t1.column2 = t2.oldColumn2 AND t1.column3 = t2.oldColumn3
WHERE t2.column1 IS NULL
UNION
SELECT * FROM table2 WHERE oldColumn2 = 'new' AND oldColumn3 = 'new' AND Deleted = 0
Вид сейчас немного медленный.Как я могу оптимизировать это представление?