我有一台速度很慢的VIEW。我不喜欢VIEW语句,因为有很多JOINS和UNION。
下面是view语句。
Create VIEW NewView AS
SELECT t2.* FROM Table1 t1
JOIN Table2 t2
ON t1.Column1 = t2.Column1 AND t1.Column2 = t2.Column2
WHERE t1.Column3 !='String'
UNION
SELECT t1.*, 'Add this string to the Last Column' FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.Column1 = t2.Column1 AND t1.Column2 = t2.Column2
WHERE t2.Column1 is null OR t1.Column3 ='String'
ORDER BY Column 4基本上的想法是,如果Table1和Table2中存在记录,则来自Table2的记录应该覆盖来自Table1的记录。我如何优化这一点?
我在两个表中都有一个主键id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,但我不确定如何将其与视图集成。我希望视图有一个主键或组合键。我不能使用其他列,因为所有列都可以有空值和重复值。
发布于 2011-07-07 22:55:57
这应该看起来像这样:
SELECT
IFNULL(t2.Col1, t1.Col1) Col1,
IFNULL(t2.Col2, t1.Col2) Col2,
IFNULL(t2.Col3, t1.Col3) Col3,
IFNULL(t2.Col4, t1.Col4) Col4,
'Add this string to the Last Column'
FROM
Table1 t1
LEFT JOIN Table2 t2 ON t1.Column1 = t2.Column1 AND t1.Column2 = t2.Column2
WHERE
t1.Column3 ='String'
ORDER BY
Col4如果数据库中的table2列可以有正常的NULL值,那么这个SELECT应该像这样开始:
SELECT
IF(t2.id is NULL, t1.Col1, t2.Col1) Col1,
IF(t2.id is NULL, t1.Col2, t2.Col2) Col1,
IF(t2.id is NULL, t1.Col3, t2.Col3) Col1,
IF(t2.id is NULL, t1.Col4, t2.Col4) Col1,
'Add this string to the Last Column'
.
.https://stackoverflow.com/questions/6612276
复制相似问题