sql返回空,尽管没有错误

时间:2018-12-04 10:09:50

标签: sql

我正在处理一个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

1 个答案:

答案 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。

此查询可能需要其他数据或过滤器。