首页 > 解决方案 > 如何跨多个具有相同 ID 的 MySQL 表选择数据

问题描述

我已经创建了两个表(表 A 和表 B)并尝试使用 INNER JOIN 两个表,但即使 ID 相同,结果也会在不同的行中。

$sql = "SELECT * FROM Table A INNER JOIN Table B ON Table A.ID = Table B.ID";

是否有任何 mysql 选择来提取一行中具有相同 ID 的所有值,如“结果”表中所示?代码:

$sql = 
  "SELECT GROUP_CONCAT(ITEM1), GROUP_CONCAT(ITEM2) 
   FROM Table A INNER JOIN Table B 
   ON Table A.ID = Table B.ID 
   WHERE Table A.ID = Table B.ID ";

图片

标签: mysql

解决方案


您必须group by id, typegroup_concat()仅用于item列。
从您的示例数据看来,每行中的一个item1或. 如果是这种情况,那么:item2null

select
  a.id, a.type,
  group_concat(coalesce(b.item1, b.item2) order by b.sub_id) item
from tablea a inner join tableb b
on b.id = a.id
group by a.id, a.type

请参阅演示
如果他们可以是两者null或两者都不是null

select
  a.id, a.type,
  group_concat(concat_ws(',', item1, item2) order by b.sub_id) item
from tablea a inner join tableb b
on b.id = a.id
group by a.id, a.type

请参阅演示
结果:

| id  | type      | item                        |
| --- | --------- | --------------------------- |
| 1   | FRUIT     | BANANA,PINEAPPLE,WATERMELON |
| 2   | VEGETABLE | SPINACH,CARROT              |
| 3   | MEAT      | CHICKEN                     |

推荐阅读