【发布时间】:2020-02-21 02:59:02
【问题描述】:
以下是我的桌子的详细信息。
show tables;
+-------------------+
| Tables_in_db |
+-------------------+
| bus_type |
| op_bus |
| op_names |
+-------------------+
3 rows in set (0.01 sec)
mysql> select * from bus_type;
+-------------+----------------+
| bus_type_id | bus_type_name |
+-------------+----------------+
| 101 | AC |
| 102 | Non AC |
| 103 | Non AC Sleeper |
| 104 | AC Sleeper |
| 105 | MINI Bus |
| 106 | TT |
+-------------+----------------+
6 rows in set (0.00 sec)
mysql> select * from op_bus;
+-----------+-------+-------------+
| op_bus_id | op_id | bus_type_id |
+-----------+-------+-------------+
| 1 | 1 | 101 |
| 2 | 1 | 102 |
| 3 | 2 | 104 |
| 4 | 2 | 103 |
+-----------+-------+-------------+
4 rows in set (0.00 sec)
mysql> select * from op_names;
+-------+---------+
| op_id | op_name |
+-------+---------+
| 1 | VRL |
| 2 | SRS |
+-------+---------+
2 rows in set (0.01 sec)
我想要像下面这样的输出
+---------+--------------------------------+
| op_name | bus_type_name |
+---------+--------------------------------+
| VRL | AC,Non AC |
| SRS | AC Sleeper, Non AC Sleeper |
+---------+--------------------------------+
我正在尝试获取 operator_name 以及总线类型,如果 bus_operator 具有不同的总线类型,那么它应该在一行中显示它。
我尝试了以下查询并得到了不同的输出。
mysql> select op.op_name, bt.bus_type_name from op_bus as ob inner join op_names as op on ob.op_id=op.op_id inner join bus_type as bt on ob.bus_type_id=bt.bus_type_id group by op.op_name,bus_type_name;
+---------+----------------+
| op_name | bus_type_name |
+---------+----------------+
| VRL | AC |
| VRL | Non AC |
| SRS | AC Sleeper |
| SRS | Non AC Sleeper |
+---------+----------------+
4 rows in set (0.00 sec)
我也尝试了按 op_name 分组,它给出了一个错误提示
select op.op_name, bt.bus_type_name from op_bus as ob inner join op_names as op on ob.op_id=op.op_id inner join bus_type as bt on ob.bus_type_id=bt.bus_type_id group by op.op_name,bus_type_name group by op.op_name;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by op.op_name' at line 1
【问题讨论】:
-
select op.op_name, GROUP_CONCAT(DISTINCT bt.bus_type_name SEPARATOR ', ') as bus_type_name from op_bus as ob inner join op_names as op on ob.op_id=op.op_id inner join bus_type as bt on ob.bus_type_id=bt.bus_type_id group by op.op_name;
标签: mysql sql group-by inner-join