mysql中如果a表中的id存在b表中manage_id下则获取两张表对应的数据

新手上路,请多包涵

表1 yc_manage
id
1
2
3
表2 yc_admin_role
manage_id
1
2,3
请问怎么构建查询语句需要查询结果为
id manage_id
1 1
2 2,3
3 2,3
图片描述

阅读 3k
3 个回答

c.sql:

use test
drop table if exists  yc_manage,yc_admin_role;
create table if not exists yc_manage(id int);
create table if not exists yc_admin_role(manage_id char(50));
insert into yc_manage         values (1),(2),(3);
insert into yc_admin_role     values ('1'),('2,3');
select * from yc_manage;
select * from yc_admin_role;
select * from yc_manage a, yc_admin_role b where find_in_set(a.id,b.manage_id);
drop table if exists  yc_manage,yc_admin_role;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

+-----------+
| manage_id |
+-----------+
| 1         |
| 2,3       |
+-----------+
2 rows in set (0.00 sec)

+------+-----------+
| id   | manage_id |
+------+-----------+
|    1 | 1         |
|    2 | 2,3       |
|    3 | 2,3       |
+------+-----------+
3 rows in set (0.00 sec)

图片描述

数据库设计有点问题吧,manage_id不适合用来做外键,应该用a表的id去做b表的外键比较合适。你应该明白角色是用户的一种属性,而不是用户是角色的一种属性,因此角色表(即a表)只用来管理角色,如果是用户只有一个角色的情况下,可以直接在用户表(即b表)增加一个角色字段,然后关联a表的id;如果用户有多个角色的情况,那最好在建一张用户角色表,将a表、b表的Id作为外键,每条记录对应一个用户一个角色,这样做会极大的方便查询和插入

--说实话、你这个建表确实有点问题、但问题还是要解决、下面这段直接在sql里执行会报错、后台里去执行就没问题

SELECT a.Id,b.WeekDay FROM [3d_User] b

LEFT JOIN [3d_User_KqTj] a

ON b.WeekDay LIKE '%" + a.Id + "%'

ORDER BY a.Id DESC

因为这个a.Id必须要利用后台赋值才能成功使用、sql里执行的话会有错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题