我有sql创建和插入脚本:
CREATE TABLE NINJA_TYPE (
NINJA_TYPE_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
DESCRIPTION varchar(30) NOT NULL,
PRIMARY KEY (NINJA_TYPE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO NINJA_TYPE VALUES (1, 'Genin');
INSERT INTO NINJA_TYPE VALUES (2, 'Chunin');
INSERT INTO NINJA_TYPE VALUES (3, 'Jounin');
INSERT INTO NINJA_TYPE VALUES (4, 'Kage');
CREATE TABLE NINJA (
NINJA_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
NINJA_TYPE_ID int(10) unsigned NOT NULL,
NAME varchar(30) NOT NULL,
PRIMARY KEY (NINJA_ID),
KEY FK_NINJA_TYPE (NINJA_TYPE_ID),
CONSTRAINT FK_NINJA_TYPE FOREIGN KEY (NINJA_TYPE_ID) REFERENCES NINJA_TYPE (NINJA_TYPE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO NINJA VALUES (1, 1, 'Fransie');
INSERT INTO NINJA VALUES (2, 1, 'Mary Grace');
INSERT INTO NINJA VALUES (3, 1, 'Hannah');
INSERT INTO NINJA VALUES (4, 1, 'Chinita');
INSERT INTO NINJA VALUES (5, 2, 'Nookie');
INSERT INTO NINJA VALUES (6, 2, 'Ruth');
INSERT INTO NINJA VALUES (7, 2, 'Rose');
INSERT INTO NINJA VALUES (8, 2, 'Irish');
INSERT INTO NINJA VALUES (9, 3, 'Tokmol');
INSERT INTO NINJA VALUES (10, 3, 'JG');
INSERT INTO NINJA VALUES (11, 3, 'JM');
INSERT INTO NINJA VALUES (12, 3, 'Jose');
INSERT INTO NINJA VALUES (13, 4, 'Tom');
INSERT INTO NINJA VALUES (14, 4, 'Johan');
INSERT INTO NINJA VALUES (15, 4, 'Christian');
INSERT INTO NINJA VALUES (16, 4, 'Lemuel');
我有sql select:
SELECT DISTINCT NAME, DESCRIPTION FROM NINJA N
INNER JOIN NINJA_TYPE NT ON N.NINJA_TYPE_ID = NT.NINJA_TYPE_ID ;
结果:
+------------+-------------+
| NAME | DESCRIPTION |
+------------+-------------+
| Fransie | Genin |
| Mary Grace | Genin |
| Hannah | Genin |
| Chinita | Genin |
| Nookie | Chunin |
| Ruth | Chunin |
| Rose | Chunin |
| Irish | Chunin |
| Tokmol | Jounin |
| JG | Jounin |
| JM | Jounin |
| Jose | Jounin |
| Tom | Kage |
| Johan | Kage |
| Christian | Kage |
| Lemuel | Kage |
+------------+-------------+
我也尝试过分组:
SELECT DISTINCT NAME, DESCRIPTION FROM NINJA N
INNER JOIN NINJA_TYPE NT ON N.NINJA_TYPE_ID = NT.NINJA_TYPE_ID GROUP BY DESCRIPTION;
结果:
+---------+-------------+
| NAME | DESCRIPTION |
+---------+-------------+
| Nookie | Chunin |
| Fransie | Genin |
| Tokmol | Jounin |
| Tom | Kage |
+---------+-------------+
我想要发生的是:
+------------+-------------+
| NAME | DESCRIPTION |
+------------+-------------+
| Fransie | Genin |
| Mary Grace | |
| Hannah | |
| Chinita | |
| Nookie | Chunin |
| Ruth | |
| Rose | |
| Irish | |
| Tokmol | Jounin |
| JG | |
| JM | |
| Jose | |
| Tom | Kage |
| Johan | |
| Christian | |
| Lemuel | |
+------------+-------------+
请不要问我为什么这样做。我有理由。我只是想知道如何处理它。请帮忙。
PS:我今天可能无法回答一些探究性问题,因为我必须去某个地方并明天回来。请随时给出答案,评论和建议。感谢。
答案 0 :(得分:2)
所以就这样做:
SELECT
dist.name,
IF(grouped.description IS NULL, '', grouped.description) AS description
FROM
(SELECT
DISTINCT NAME,
DESCRIPTION
FROM
NINJA AS N
INNER JOIN NINJA_TYPE AS NT
ON N.NINJA_TYPE_ID = NT.NINJA_TYPE_ID) AS dist
LEFT JOIN
(SELECT
DISTINCT NAME,
DESCRIPTION
FROM
NINJA AS N
INNER JOIN NINJA_TYPE AS NT
ON N.NINJA_TYPE_ID = NT.NINJA_TYPE_ID
GROUP BY
DESCRIPTION) AS grouped
ON
dist.name=grouped.name
- 你会看到结果expected。请注意,对于使用应用程序后处理的格式化目的,更好的想法。
答案 1 :(得分:1)
虽然我完全赞同Mihai,但可以也做这样的事情......
SELECT * FROM users;
+----+----------+-----------+
| id | name | surname |
+----+----------+-----------+
| 1 | John | Lennon |
| 2 | Paul | McCartney |
| 3 | George | Harrison |
| 4 | Ringo | Starr |
| 5 | Yoko Ono | Lennon |
| 6 | Linda | McCartney |
| 7 | Olivia | Harrison |
| 8 | Barbara | Bach |
| 9 | Stella | McCartney |
+----+----------+-----------+
SELECT u.name
, IF(u.surname=@last,'',@last:=u.surname) surname
FROM users u, (SELECT @last='')x
ORDER
BY u.surname;
+----------+-----------+
| name | surname |
+----------+-----------+
| Barbara | Bach |
| George | Harrison |
| Olivia | |
| John | Lennon |
| Yoko Ono | |
| Paul | McCartney |
| Linda | |
| Stella | |
| Ringo | Starr |
+----------+-----------+
答案 2 :(得分:1)
这个简单的怎么样?
SELECT
nt.DESCRIPTION, GROUP_CONCAT(n.name) names
FROM
NINJA_TYPE nt
JOIN
NINJA n
ON n.NINJA_TYPE_ID = nt.NINJA_TYPE_ID
GROUP BY
nt.NINJA_TYPE_ID;
+-------------+-----------------------------------+
| DESCRIPTION | names |
+-------------+-----------------------------------+
| Genin | Fransie,Mary Grace,Hannah,Chinita |
| Chunin | Nookie,Ruth,Rose,Irish |
| Jounin | Tokmol,JG,JM,Jose |
| Kage | Tom,Johan,Christian,Lemuel |
+-------------+-----------------------------------+