MySQL 的一个问题,怎么从表 1 中产生表 2?

2014-08-09 03:52:15 +08:00
 qian

表1(tab1)
row1: user1 id1 0

row2: user1 id2 rid1
row3: user2 id3 rid1
row4: user3 id4 0
row5: user4 id5 rid4
row6: user5 id6 rid0
row7: user1 id7 rid4
其中
- user, id, rid 是数字
- 仅 id 是 unique 的
- 任一 id 不等值于 0
- rid1 等值于 id1,rid4 等值于 id4
- rid0 对应的 id 不在 tab1 的 id 范围内

怎么写 mysql 的命令行命令来产生表2?
表2(tab2)
列1 列2
row1: user1 user1

row2: user1 user2
row3: user3 user4
row4: user4 user1

在你们看帖的此时我在谷歌着…

2184 次点击
所在节点    问与答
1 条回复
ETiV
2014-08-09 04:19:12 +08:00
tab2.row4 是否应该是 "user3 user1"

-- create
CREATE TABLE `tab1` (
`idx` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(11) NOT NULL DEFAULT '',
`rel` int(11) NOT NULL,
PRIMARY KEY (`idx`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- insert
INSERT INTO `tab1` (`idx`, `name`, `rel`)
VALUES
(1, 'user1', 0),
(2, 'user1', 1),
(3, 'user2', 1),
(4, 'user3', 0),
(5, 'user4', 4),
(6, 'user5', 999),
(7, 'user1', 4);

-- query
SELECT tab1.name, tab_.name FROM tab1 JOIN tab1 AS tab_ ON tab_.rel = tab1.idx;

结果就是:
user1 user1
user1 user2
user3 user4
user3 user1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX