求一条SQL语句的疑问:是不是IN语句里不能用到Varchar里取出的内容

bont2004 2006-02-03 10:39:36
俺有两个表

CREATE TABLE `user` ( #用户表
`Id` int(10) unsigned NOT NULL auto_increment,
`StrName` varchar(20) NOT NULL default '',
`StrRole` varchar(200) NOT NULL default '',
PRIMARY KEY (`Id`)
)
此表数据如下
id StrName StrRole
------ ------------ --------
1 Text 0
2 Text2 0
3 Text3 0
4 admin 1,2


CREATE TABLE `role` ( #属性表
`Id` int(11) unsigned NOT NULL auto_increment,
`Str_Name` varchar(100) NOT NULL default '',
PRIMARY KEY (`Id`)
)
此表数据如下
id Str_Name
------ ----------
1 管理员
2 编辑
3 会员
4 贵宾
5 版主

若用
select A.id,B.Str_Name,A.StrRole From user AS A LEFT JOIN role AS B ON B.Id IN(1,2) Where A.Id=4
可以取出正确的结果
Id Str_Name StrRole
------ ---------- ------------
1 管理员 admin
2 编辑 admin

若用
select A.id,B.Str_Name,A.StrRole From user AS A LEFT JOIN role AS B ON B.Id IN(A.StrRole) Where A.Id=4
则仅能取出第一条记录
Id Str_Name StrRole
------ ---------- ------------
1 管理员 admin

不知何故??
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bont2004 2006-02-09
  • 打赏
  • 举报
回复
顶起来!!
bont2004 2006-02-04
  • 打赏
  • 举报
回复
解决办法是将含有多个值行转成列,即变成(1,2,...,n)这样的一个集合。

可以详细说说吗
数据库这个,俺很菜
hy2003fly 2006-02-04
  • 打赏
  • 举报
回复
因为A.StrRole为varchar类型,在处理与数字有关的操作时,如果是数字开头的,例如:'1,2'
它会自动只取前面的1,而忽略后面的所有。解决办法是将含有多个值行转成列,即变成(1,2,...,n)这样的一个集合。

56,677

社区成员

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

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