jsp页面关于数据库多对多查询的sql语句应该怎么写?

我是用的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