如何使用 sqlite 中的视图在特定行中添加列?
Posted
技术标签:
【中文标题】如何使用 sqlite 中的视图在特定行中添加列?【英文标题】:How to add a column in specific row using a view in 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 |
+-----+-------+-------+
不重复任何行,这可能吗?
【问题讨论】:
【参考方案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
SQLFiddle Demo
输出
╔════╦══════╦══════╗
║ 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 文档
【讨论】:
以上是关于如何使用 sqlite 中的视图在特定行中添加列?的主要内容,如果未能解决你的问题,请参考以下文章