如何根据A表主键集 关联B表数据

能吃 2015-10-14 11:24:11
A表如下
id B_ids
148 1,2,3
151 2
152 3
153 0


B表如下
id name
1 四段7-47号
2 三段22-22号
3 四段6-133号
4 三段22-19号
5 二段24-109号

问题:B_ids是B表中主键集,如何根据A表中B_ids集 关联 B表中ID,从而显示B表的name
比如上便2表就显示出来
id name
1 四段7-47号
2 三段22-22号
3 四段6-133号
2 三段22-22号
3 四段6-133号
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick-he 2015-11-27
  • 打赏
  • 举报
回复
引用 4 楼 pony520 的回复:
select a.id,b.id,b.name from a,b where FIND_IN_SET(b.id,a.B_ids) order by a.id,b.id; 这个好用,但是只能索引走的不好,A表的B_IDS为什么用逗号这样方式存储,不好,用多条记录存储不好嘛 A表如下 id B_ids 148 1 148 2 148 3 151 2 152 3 153 0
这是表设计问题,你这种也不好,如果id相同的多,你数据就会有好多。而且逗号在数据库表的设计中用的还是挺多的
pony520 2015-11-27
  • 打赏
  • 举报
回复
如果A表的B_IDS想显示成一条,可以用GROUP_CONCAT(B_IDS)也是逗号分隔转成一条的,B_IDS改为INT型,索引走的也好的
pony520 2015-11-27
  • 打赏
  • 举报
回复
select a.id,b.id,b.name from a,b where FIND_IN_SET(b.id,a.B_ids) order by a.id,b.id; 这个好用,但是只能索引走的不好,A表的B_IDS为什么用逗号这样方式存储,不好,用多条记录存储不好嘛 A表如下 id B_ids 148 1 148 2 148 3 151 2 152 3 153 0
能吃 2015-10-14
  • 打赏
  • 举报
回复
请问以上功能怎么用一条SQL语句完成?
ACMAIN_CHM 2015-10-14
  • 打赏
  • 举报
回复
select a.id,b.id,b.name
from a,b
where FIND_IN_SET(b.id,a.B_ids)
order by a.id,b.id;
LongRui888 2015-10-14
  • 打赏
  • 举报
回复
try this:
mysql> use world;
Database changed


mysql> create table A(id int,B_ids varchar(30));
Query OK, 0 rows affected (0.31 sec)

mysql> insert into A values(148,'1,2,3'),(151,'2'),(152,'3'),(153,'0');
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> create table B(id int,name varchar(50));
Query OK, 0 rows affected (0.40 sec)

mysql> insert into B values(1, '四段7-47号'),(2,'三段22-22号'),(3,'四段6-133号'),(4,'三段22-19号'),(5, '二段24-109号');
Query OK, 5 rows affected (0.07 sec)
Records: 5  Duplicates: 0  Warnings: 0


mysql> select B.*  from A , B  where concat(',',A.B_ids,',') like concat('%,',cast(B.id as char),',%') order by A.id,B.id;
+------+-------------+
| id   | name        |
+------+-------------+
|    1 | 四段7-47号  |
|    2 | 三段22-22号 |
|    3 | 四段6-133号 |
|    2 | 三段22-22号 |
|    3 | 四段6-133号 |
+------+-------------+
5 rows in set (0.00 sec)

mysql>

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧