我正在处理一个jsp文件,并且有以下用于sql的表
- idea(IdeaID, Title, Type, IsApproved, ... , OwnerID)
- project(PID, ..., IdeaID)
- ideaowner(ID, Name, ...)
- managerrequestidea (IdeaID, MangerID)
我希望sql执行的操作是检索项目表中未存在的所有构想,并且“ IsApproved”属性为true,并且尚未从用户(经理)那里请求任何构想>
我的SQL:
String sql = "select idea.IdeaID, Title, Type, Name from idea, project, ideaowner, mangerrequestidea m where idea.IdeaID<>project.IdeaID and IsApproved=1 and ID=OwnerID and idea.IdeaID=m.IdeaID and m.MangerID<>" + userId;
//userId is an int of the logged user ID
该项目表目前为空,所以我不知道它是否会影响它。
例如:
ideaowner
(ID, Name)
(1, mat x)
(2, susan y)
idea
(IdeaID, Title, Type, IsApproved, OwnerID)
(1, an application, Application, 1, 1)
(2, a software, Software, 0, 1)
(3, a software, Software, 1, 2)
(4, a website, Website, 1, 2)
Project
(PID, IdeaID)
(1,3)
managerrequestidea
(IdeaID, MangerID)
(4, 2)
在jsp中
userId= 2; //susan
我应该得到的东西
(1, an application, Application, mat x)
我真正得到的
//Nothing
答案 0 :(得分:0)
您的查询(重写为显式联接)将如下所示:
"select idea.IdeaID, Title, Type, Name
from idea
inner join project on idea.ideaid <> project.ideaid
inner join ideaowner on idea.ownerid = ideaowner.id
inner join managerrequestidea m on idea.ideaid = m.ideaid
where
and idea.IsApproved = 1
and m.MangerID <> " + userId;
由于userId = 2
仅包含managerrequestidea
= 2的一行,并且您在MangerId
子句中应用了过滤器,因此WHERE
的结果集为空排除该ID。
由于您对managerrequestidea
的第一个拟合结果为0行,因此无需进行任何其他评估。 0行乘以任意数量的行等于0。
此查询可能需要其他数据或过滤器。