2 sniper nie sniper_nie 于 2016.03.22 09:59 提问

mysql in子句问题请教

1、select role_auth_ids from test_role where role_name='经理' 的执行结果:
+------------+
role_auth_ids
+------------+
1,2,3

2、select auth_name from test_auth where auth_id in (1,2,3)的执行结果:
+------+
auth_name
+------+
商品管理
商品添加
商品编辑

但是,将1、2条语句合并后,即select auth_name from test_auth where auth_id in (select role_auth_ids from test_role where role_name='经理'),执行结果只有一条数据,也就是只有商品管理一个数据。这是why?

SELECT auth_name FROM test_auth WHERE auth_id IN (SELECT replace(concat('''',role_auth_ids,''''),',',''',''') FROM test_role WHERE role_name = '经理 ') 给in子句加上单引号也不行..................

请教各位大神我该如何才能从通过test_role中role_auth_ids查询出对应的test_auth表中的auth_name呢?

6个回答

hxm_ss5224
hxm_ss5224   2016.03.22 10:14

你将你的test_auth 和 test_role 表的关于这几个字段的具体数据列检索结果列一下吧

a8761087
a8761087   Rxr 2016.03.22 10:20

查询语句好乱。那几个id是varchar2类型的,需要每个id上都用单引号包含。应该这样 in ('1','2','3')

sniper_nie
sniper_nie 刚开始我也是这么分析的,后来我通过 SELECT replace(concat('''',role_auth_ids,''''),',',''',''') FROM test_role WHERE role_name = '经理 '语句给结果加上单引号了,也就是你说的样子。但还是不行么
一年多之前 回复
abcd246781
abcd246781   2016.03.22 10:28

检查 select role_auth_ids from test_role where role_name='经理' 这条语句的查询结果

danielinbiti
danielinbiti   Ds   Rxr 2016.03.22 10:30
 用find_in_set
 select auth_name from test_auth where find_in_set(auth_id,(select role_auth_ids from test_role where role_name='经理'))
zhaihonghonghzh
zhaihonghonghzh   2016.03.22 13:54

看下你建的表中的字段的数据类型是否一致 sql应该是没有问题的

a8761087
a8761087   Rxr 2016.03.22 14:00

'经理 ' 经理两字后有空白字符串

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!