将视图从 oracle 转换为 mysql

Posted

技术标签:

【中文标题】将视图从 oracle 转换为 mysql【英文标题】:convert view from oracle to mysql 【发布时间】:2016-12-01 11:51:51 【问题描述】:

下面是oracle查询,

    CREATE OR REPLACE VIEW view1 AS
 SELECT t1.col1,t1.col2
       FROM (select * FROM table1 asap, table2 pids where asap.parentid= pids.parentid) t1,
            (select * from table1 r_asap,table3 ids where r_asap.id=ids.id) t2
        WHERE
             t1.col2=t2.col2 and
             (t2.col3 <>t1.col3 OR
              t2.col4<>t1.col4 OR
       t2.col5 <>t1.col5 )
       order by t1.col1

我需要将其转换为 mysql 视图.. 任何人都可以帮助我

【问题讨论】:

你有没有尝试过? 我试图转换到 mysql 查询,但不是 mysql 视图。以下是 mysql 的查询。我需要查看 select t1.col1,t1.col2 from (select asap.* FROM table1 asap, table2 pids where asap.parentid= pids.parentid) t1, (select r_asap.* from table1 r_asap,table3 ids where r_asap.id=ids.id) t2 WHERE t1.col2=t2.col2 and (t2.col3 &lt;&gt;t1.col3 OR t2.col4&lt;&gt;t1.col4 OR t2.col5 &lt;&gt;t1.col5 ) order by t1.col1 我对 t1 和 t2 在 where 条件下的比较感到困惑。 mysql怎么办 我已经发帖回答希望有用 @scaisEdge 嗨,已发布? 【参考方案1】:

这应该是 mysql 兼容的,但总体上使用显式连接(对我来说更具可读性)

由于 mysql 不允许在视图中使用子查询,您必须首先为子选择创建一个视图并在此构建最终视图

    CREATE OR REPLACE VIEW view_sub1 AS
    SELECT col1, col2 
    FROM table1 asap 
    INNER JOIN  table2 pids on asap.parentid= pids.parentid;

    CREATE OR REPLACE VIEW view_sub2 AS
    SELECT c2l2
    FROM table1 r_asap
    INNER JOIN table3 ids on  r_asap.id=ids.id ;

    CREATE OR REPLACE VIEW view1 AS
    SELECT view_sub1.col1,view_sub1.col2
    FROM view_sub1
    INNER JOIN view_sub2 on view_sub1.col2=view_sub2.col2  
    WHERE view_sub2.col3 <>view_sub1.col3 
    OR    view_sub2.col4<>view_sub1.col4
    OR    view_sub2.col5 <>view_sub1.col5;

【讨论】:

嗨 scaisEdge,错误 SQL 错误 (1349):视图的 SELECT 在 FROM 子句中包含子查询 或者我做了同样的方式..即,创建单独的表然后使用这些表......但是,我试图在一个查询中做......这是不可能的......有两个参考在哪里条件.. 无论如何感谢您的回答...并接受它...

以上是关于将视图从 oracle 转换为 mysql的主要内容,如果未能解决你的问题,请参考以下文章

MySQL视图查询超慢,求解答

MySQL视图查询超慢,求解答

通过在 Oracle Apex 中创建视图将 cols 转换为 oracle 中的行

MySQL:在视图中将小数转换为百分比

将 MySQL 视图转换为 Postgres

Oracle向MySQL迁移