如何在一列中仅显示一个数据,并在另一列中列出多行

时间:2014-01-03 21:39:59

标签: mysql sql inner-join

我有两个MySQL表:

民意调查表,带有ID和标题......

+----+------------------------------------------------------+
| ID | title                                                |
+----+------------------------------------------------------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    |
+----+------------------------------------------------------+

和poll_data表,带有选项......

+----+--------+-------------------------+-------+
| ID | pollID | text                    | votes |
+----+--------+-------------------------+-------+
|  1 |      1 | No accedo               |    11 |
|  2 |      1 | Una vez al mes          |    10 |
|  3 |      1 | Una vez a la semana     |    23 |
|  4 |      1 | Una vez al día          |    20 |
|  5 |      1 | Más de una vez al día   |    19 |
|  6 |      2 | Coche particular        |    10 |
|  7 |      2 | Autobus                 |    20 |
|  8 |      2 | Tranvía                 |    50 |
|  9 |      2 | Bicicleta               |     5 |
| 10 |      2 | Taxi                    |     5 |
+----+--------+-------------------------+-------+

我想得到这个结果,只显示一列中的一段数据,其中列中列有多行:

+----+------------------------------------------------------+-------------------------+-------+
| ID | title                                                | text                    | votes |
+----+------------------------------------------------------+-------------------------+-------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                | No accedo               |    11 |
|    |                                                      | Una vez al mes          |    10 |
|    |                                                      | Una vez a la semana     |    23 |
|    |                                                      | Una vez al día          |    20 |
|    |                                                      | Más de una vez al día   |    19 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Coche particular        |    10 |
|    |                                                      | Autobus                 |    20 |
|    |                                                      | Tranvía                 |    50 |
|    |                                                      | Bicicleta               |     5 |
|    |                                                      | Taxi                    |     5 |
+----+------------------------------------------------------+-------------------------+-------+

执行此SQL命令:

SELECT polls.ID, polls.title, poll_data.text, poll_data.votes
FROM polls
INNER JOIN poll_data
ON polls.ID = poll_data.pollID;

我得到了这个结果:

+----+------------------------------------------------------+-------------------------+-------+
| ID | title                                                | text                    | votes |
+----+------------------------------------------------------+-------------------------+-------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                | No accedo               |    11 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez al mes          |    10 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez a la semana     |    23 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez al día          |    20 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Más de una vez al día   |    19 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Coche particular        |    10 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Autobus                 |    20 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Tranvía                 |    50 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Bicicleta               |     5 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Taxi                    |     5 |
+----+------------------------------------------------------+-------------------------+-------+

1 个答案:

答案 0 :(得分:2)

正如大家在评论中所说,这是显示您的数据的问题。但是,如果您真的想在纯MySql上执行此操作,正如我所说,这是可能的。这就是你需要的东西(也许它可以改进,但我现在太累了,不能思考)

SELECT IF(ord=(cnt-1),id,'') id, 
       IF(ord=(cnt-1),title,'') title,
       text,
       votes
FROM
(
SELECT polls.ID, 
       polls.title, 
       poll_data.text, 
       poll_data.votes, 
       CASE WHEN COALESCE(@remain,0) = 0
            THEN @remain:=grouped.cnt-1
            ELSE @remain:=@remain-1 
        END as ord,
       grouped.cnt
  FROM polls INNER JOIN poll_data
           ON (polls.ID = poll_data.pollID)
     INNER JOIN 
          (select pollid, 
                  count(*) cnt 
             FROM poll_data 
             GROUP BY pollid) grouped
        ON grouped.pollid = polls.ID
ORDER BY polls.id, ord desc) a

在这里查看小提琴:http://sqlfiddle.com/#!2/1c7c3/18