【问题标题】:How to add a column in specific row using a view in sqlite?如何使用 sqlite 中的视图在特定行中添加列?
【发布时间】:2013-04-07 05:26:19
【问题描述】:

我在 sqlite 的数据库中有 3 个表

表 A


+-----+-------+ | id | name | +-----+-------+ | 1 | Ann | | 2 | Bill | | 3 | Mike | | 4 | Zoey | +-----+-------+

表 B

+-----+-----+
| idA | idC |
+-----+-----+
| 1   | 1   |
| 1   | 2   |
| 2   | 3   |
| 3   | 2   |
| 4   | 1   |
+-----+-----+

表 C

+-----+-----+
|  id | type|
+-----+-----+
| 1   | x   |
| 2   | y   |
| 3   | z   |
+-----+-----+

我试过了:

CREATE VIEW test AS SELECT A.id, A.name, C.type
FROM A, B, C
WHERE B.idA = A.id
AND B.idB = B.id

然后我得到:


**View test**
+-----+-------+-------+
|  id | name  | type  |
+-----+-------+-------+
| 1   | Ann   | x     |
| 1   | Ann   | y     |
| 2   | Bill  | z     |
| 3   | Mike  | y     |
| 4   | Zoey  | x     |
+-----+-------+-------+

但我想做这样的事情

+-----+-------+-------+
|  id | name  | type  |
+-----+-------+-------+
| 1   | Ann   | x,y   |
| 2   | Bill  | z     |
| 3   | Mike  | y     |
| 4   | Zoey  | x     |
+-----+-------+-------+

不重复任何行,这可能吗?

【问题讨论】:

    标签: sql database sqlite view


    【解决方案1】:

    SQLite 支持GROUP_CONCAT()

    CREATE VIEW test 
    AS
    SELECT  A.id, A.name, GROUP_CONCAT(C.type) AS Type
    FROM    A, B, C
    WHERE   B.idA = A.id AND 
            B.idC = C.id
    GROUP   BY A.id, A.name
    

    输出

    ╔════╦══════╦══════╗
    ║ id ║ name ║ Type ║
    ╠════╬══════╬══════╣
    ║  1 ║ Ann  ║ x,y  ║
    ║  2 ║ Bill ║ z    ║
    ║  3 ║ Mike ║ y    ║
    ║  4 ║ Zoey ║ x    ║
    ╚════╩══════╩══════╝
    

    来自 SQLite 文档

    group_concat() 函数返回一个字符串,它是 X 的所有非 NULL 值的串联。如果存在参数 Y 然后它用作 X 实例之间的分隔符。逗号 (",") 如果省略 Y,则用作分隔符。的顺序 串联的元素是任意的。

    【讨论】:

      【解决方案2】:

      在定义视图时试试这个查询:

      SELECT A.id, A.name, GROUP_CONCAT(C.type) type
      FROM A
      INNER JOIN B ON B.idA = A.id
      INNER JOIN C ON C.id = B.idC
      GROUP BY A.id
      

      查看GROUP_CONCAT() 的 MySQL 文档

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        • 2012-04-17
        • 2016-11-26
        相关资源
        最近更新 更多