V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qian
V2EX  ›  问与答

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

  •  
  •   qian · 2014-08-09 03:52:15 +08:00 · 2275 次点击
    这是一个创建于 3760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    表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

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

    第 1 条附言  ·  2014-08-09 04:41:09 +08:00
    是的,tab2.row4 应该是 "user3 user1"。

    谢谢。我慢慢消化下。
    1 条回复    2014-08-09 04:19:12 +08:00
    ETiV
        1
    ETiV  
       2014-08-09 04:19:12 +08:00   ❤️ 1
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2591 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 04:45 · PVG 12:45 · LAX 20:45 · JFK 23:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.