我是用的mysql数据库
这是一张用户表
这是项目表
现在我想根据用户表里的“DetectID”对应项目表里的“id”进行关联查询其项目名称,“DetectID”里有几个数据,就查出项目表里的几个名称。这条SQL语句该怎么写,我老是查询到第一条数据就结束了。
如果项目表数据不多,可以一次查询所有项目表,用程序处理你的detectID与名称的匹配。
注:你这个设计存在缺陷,应该有一张表:项目id与用户id的对应关系表
detectID的分割符最好的半角逗号,什么数据库?
根据主外键来查询,用主外键判断查出来的是否正确
select ItemName from 项目表 where id in(select DetectID from 用户表 where username=xxx);
一个表里有另一个表的外键
USE test;
BEGIN
DECLARE @param CHAR(10),
@sql NVARCHAR(100);
SELECT @param= REPLACE(DetectID,';',',') FROM dbo.**Master** WHERE mid=2;
EXECUTE ('SELECT ItemName FROM dbo.**Item** WHERE id IN('+@param+')');
END
你试下,我建的db是test , mid=2 这句换成你的检索条件
Master 为用户表
item 为项目表
希望对你有帮助
select ItemName from 项目表 where DetectID in( select replace(DetectID,";",",") from 用户表 where username='xxx' ); 用replace将;换为,
试试一个表搜索上在包含另外一个表
先查询用户表中的DetectID的值,查询出的值比如是ls_DetectID;
再通过
String ls_DetectID_temp[] = ls_DetectID.split(";");
做一个for循环
for(int i=0;i<ls_DetectID_temp.length;i++){
通过ls_DetectID_temp[i]查询项目表中的数据
}
就直接连接查询吧,例如等价连接文件里的fid与fid一致
with 项目表( id,itemname)
as(
select 1 ,'AIS' union all
select 2 ,'雷达应答器' union all
select 3 ,'示位标' union all
select 4 ,'短波通信' union all
select 6 ,'电子标签'
),
用户表( UserName , DetectID)
as
(
select 'senya','0' union all
select 'tan','1,2' union all
select 'wen','4,6'
)
select b.UserName ,
stuff((select ','+a.itemname
from 项目表 a
where ','+ b.UserName +',' like '%,'+cast(a.id as varchar(10))+',%' for xml path('') ),1,1,'') as UserName
from 用户表 b