代码之家  ›  专栏  ›  技术社区  ›  Kris Senden

在单列中存储子数据

  •  0
  • Kris Senden  · 技术社区  · 8 年前

    我有以下表格:

     CREATE TABLE titles (
         id INTEGER,
         title VARCHAR(255)
       );
       INSERT INTO titles (id, title) VALUES (1, "Mars Attacks!");
       INSERT INTO titles (id, title) VALUES (2, "Da Vinci Code");
    
       CREATE TABLE GenreName (
         id INTEGER,
         name VARCHAR(255)
       );
    
       INSERT INTO GenreName (id, name) VALUES (1, "Action");
       INSERT INTO GenreName (id, name) VALUES (2, "Adventure");
       INSERT INTO GenreName (id, name) VALUES (3, "Comedy");
       INSERT INTO GenreName (id, name) VALUES (4, "Science-Fiction");
       INSERT INTO GenreName (id, name) VALUES (5, "Thriller");
    
       CREATE TABLE Genre (
         title INTEGER,
         genre INTEGER
       );
       INSERT INTO Genre (title, genre) VALUES (1, 1);
       INSERT INTO Genre (title, genre) VALUES (1, 3);
       INSERT INTO Genre (title, genre) VALUES (1, 4);
       INSERT INTO Genre (title, genre) VALUES (2, 1);
       INSERT INTO Genre (title, genre) VALUES (2, 5);
    

    Id            Title                  Genre
    1             Mars Attacks!          Action, Comedy, Science-Fiction
    2             Da Vinci Code          Action, Thriller
    

    我一直坚持用递归方式选择数据。

    我有一个 DBFiddle

    2 回复  |  直到 8 年前
        1
  •  0
  •   Raman Sharma    8 年前

    从genre g join titles t on t.id=g.title join genrename gn on gn中选择t.id、t.title、group_concat(gn.name)。id=g.genre group by t.id,t.title

        2
  •  0
  •   Chitholian    8 年前

    使用SQL外部联接

    select titles.id, name, title from titles left outer join genre on titles.id = genre.title left outer join genrename on genre.genre = genrename.id;