• 在Navicat for MySQL中打开视图时,提示视图没有主键的问题


    一直把视图理解为一个select语句而已,视图一般就是用于查询,不会通过视图来更新表或视图本身的数据,所以视图根本不需要什么主键。今天自己建了一个视图view_test:

    drop view if exists view_test
    create view view_test
    as
    select a.c1,a.c2,
    b.c1,b.c2,
    c.c1,c.c2,
    d.c1,d.c2
    from table_A a
    join teble_B b on a.c3=b.c3
    join table_C c on b.c4=c.c4
    join table_D d on c.c5=d.c5
    where d.c6 in (
    select c6 from table_E  where c5=(select c5 from table_D where c7='123321')
    )
    order by a.c1

    在Navicat of MySQL中打开这个视图的时候,弹出如下的提示(网上的图,图中第一行的v_sys_user就是自己创建的视图名称),说这个视图没有主键,但是能正常查询出视图的结果。

    后来在 http://blog.csdn.net/wufengui1315/article/details/11620393

    这里查到,说用了join或者where子查询里如果用了From子句中的表的话就会报这个提示,于是我把where子句去掉,改成:

    drop view if exists view_test
    create view view_test
    as
    select a.c1,a.c2,
    b.c1,b.c2,
    c.c1,c.c2,
    d.c1,d.c2
    from table_A a
    join teble_B b on a.c3=b.c3
    join table_C c on b.c4=c.c4
    join table_D d on c.c5=d.c5
    order by a.c1

    结果还是报相同的提示框,后来不小心忽略了 "order by a.c1" 这一行执行上述语句,打开的时候,就没这个提示了,再把where子句加回来,但把order by语句去掉,打开也不会报错,说明问题出在order by子句,而不是什么where 或者join.只要去掉order by语句就好了

    另外,报错的视图语句(包含order by语句),在Navicat for MySQL中打开会报提示,但用MySQL Workbench打开就不会,说明这并不是什么大问题。

  • 相关阅读:
    python中的time模块
    CSS 布局
    8 Function类型
    2 node 核心
    1 node 简介
    13 对象
    JS 算法一
    JS 模块化
    1 谈谈section标签
    JS 练习一
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5741303.html
Copyright © 2020-2023  润新知