mysql create view的时候能否建立一个自增变量?

netxuning 2009-09-02 12:04:08
我建立视图的语句如下:
CREATE OR REPLACE VIEW viewlog AS SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid;

现在希望在iid前增加一个did int auto_increment!
...全文
766 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
CREATE OR REPLACE VIEW viewlog AS SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid
首先as select 中不能有参数或者变量 意思就是说不能用用户自定义变量 @aa=1 的办法

view是一个结果集的快照,所以要从SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid
入手

类似 SELECT rownum as did,tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid
netxuning 2009-09-02
  • 打赏
  • 举报
回复
根据视图的性质来讲我上边的要求好似实现不了,不过既然 存在着两个字段tbl1.iid和tbl2.rid能够唯一表示SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid 后的结果集,
能不能通过一种算法用tbl1.iid和tbl2.rid算出一个整数,使其能够唯一代表自己的记录呢?
netxuning 2009-09-02
  • 打赏
  • 举报
回复
嗯,确实非常棒!

不过飓风兄弟还有没有更好的思路?

我的表非常大,执行起来有点慢,还有就是表中的记录总是在更新,如果有新的记录进来,这个did是不是就会重新'洗牌'呢?
我需要这个did无论添加多少条记录,原来的还是原来的,新来的是一个新的唯一的数字!
vinsonshen 2009-09-02
  • 打赏
  • 举报
回复
考虑将“SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid;
”这部分放进一个临时表,然后视图取这个临时表吧
ACMAIN_CHM 2009-09-02
  • 打赏
  • 举报
回复
http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
MySQL中的ROWNUM的实现

几种常见的方法。
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
我的是两种思路

后者不用建表
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nianzhang747 的回复:]
不过这样太麻烦
mysql> select count(*) as did,t.id from t  left outer join  t as ttt on t.id>=tt
t.id group by id;
+-----+------+
| did | id  |
+-----+------+
|  1 | 0001 |
|  2 | 0002 |
|  3 | 0003 |
+-----+------+
3 rows in set (0.00 sec)
这样解决 t表数据
mysql> select * from t;
+------+
| id  |
+------+
| 0001 |
| 0002 |
| 0003 |
+------+
3 rows in set (0.00 sec)
[/Quote]
你先研究研究这段代码 就明白了 不用建表
netxuning 2009-09-02
  • 打赏
  • 举报
回复
坦白的讲,细节上没看明白,但大概看见了你的思路,深为之折服,谢谢!

不过能不能不新建一个表,新建一个表的话不适合我的应用!
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
CREATE OR REPLACE VIEW viewlog AS SELECT t.id,tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` ,'t' WHERE tbl1.iid = tbl2.iid

我的意思是把 SELECT t.id,tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` ,'t' WHERE tbl1.iid = tbl2.iid
看成我的t表

看明白了没
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
不过这样太麻烦
mysql> select count(*) as did,t.id from t left outer join t as ttt on t.id>=tt
t.id group by id;
+-----+------+
| did | id |
+-----+------+
| 1 | 0001 |
| 2 | 0002 |
| 3 | 0003 |
+-----+------+
3 rows in set (0.00 sec)
这样解决 t表数据
mysql> select * from t;
+------+
| id |
+------+
| 0001 |
| 0002 |
| 0003 |
+------+
3 rows in set (0.00 sec)
netxuning 2009-09-02
  • 打赏
  • 举报
回复
在我的数据表`tbl1`和`tbl2`中,存在着两个字段tbl1.iid和tbl2.rid能够唯一表示SELECT tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` WHERE tbl1.iid = tbl2.iid; 后结果集的记录,但我需要有一个字段能够唯一标示每一条记录,不一定非得是自增的!
nianzhang747 2009-09-02
  • 打赏
  • 举报
回复
或者创建一个新表t(id smallint auto_increment not null,iid int,primary key(did));
然后插入tbl1的所有iid数据得到id



CREATE OR REPLACE VIEW viewlog AS SELECT t.id,tbl1.iid, tbl2.title FROM `tbl1`,`tbl2` ,'t' WHERE tbl1.iid = tbl2.iid
netxuning 2009-09-02
  • 打赏
  • 举报
回复
嗯,有道理!

我就是需要view中能有一个唯一表示该记录的号!

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧