1

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     |
+-----+-------+-------+

行を繰り返さずに、これは可能ですか?

4

2 に答える 2

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 が指定されている場合、コンマ (",") がセパレータとして使用されます。省略。連結された要素の順序は任意です。

于 2013-04-07T05:31:59.790 に答える
0

ビューを定義するときは、クエリに対してこれを試してください。

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

MySQL のドキュメントを参照してください。GROUP_CONCAT()

于 2013-04-07T05:29:50.430 に答える