我有2 tables
,分别名为SectionAccess
和AdminConsole
。 SectionAccess包含字段
- User Access
- User ID
- Link.
1用户ID可以有几个链接。
AdminConsole
包含字段
- Link
- Project ID (PPMID)
- Application ID (EPRID)
- Project Name.
每个链接都有一个独特的项目。
我使用webpage
创建Razor
,用户可以在其中输入用户ID,并且网页会在表格中显示当前位于该用户ID下的项目。我为此做的SQL查询是:
SELECT SectionAccess.Link, SectionAccess.UserID, AdminConsole.PPMID, AdminConsole.EPRID, AdminConsole.Proj_Name FROM SectionAccess
INNER JOIN AdminConsole ON SectionAccess.Link=AdminConsole.Link
WHERE SectionAccess.UserID like ('%" + Request["UserID"] + "%');
这很有效。现在我在这个表下面添加另一个表,它将显示与该用户ID无关的项目。我这样做了,但它没有返回任何东西。
SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole
WHERE NOT EXISTS
(SELECT SectionAccess.Link, SectionAccess.UserID, AdminConsole.PPMID, AdminConsole.EPRID, AdminConsole.Proj_Name FROM SectionAccess
INNER JOIN AdminConsole ON SectionAccess.Link=AdminConsole.Link
WHERE SectionAccess.UserID = '" + Request["UserID"] + "');
这里的问题是什么?
答案 0 :(得分:0)
尝试省略子查询中的连接:
SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole
WHERE Link NOT IN
(SELECT SectionAccess.Link FROM SectionAccess
WHERE SectionAccess.UserID = '" + Request["UserID"] + "');
答案 1 :(得分:0)
存在无法返回NULL。它仅检查子查询中是否存在行,因此它只能返回true或false。
您可以使用EXCEPT
SELECT SectionAccess.Link,SectionAccess.UserID,AdminConsole.PPMID,AdminConsole.EPRID,AdminConsole.Proj_Name FROM SectionAccess INNER JOIN AdminConsole ON SectionAccess.Link = AdminConsole.Link
除非
SELECT SectionAccess.Link,SectionAccess.UserID,AdminConsole.PPMID,AdminConsole.EPRID,AdminConsole.Proj_Name FROM SectionAccess INNER JOIN AdminConsole ON SectionAccess.Link = AdminConsole.Link 在哪里SectionAccess.UserID喜欢('%" +请求[" UserID"] +"%');
答案 2 :(得分:0)
您要在子查询中再次加入 AdminConsole ,而应从主查询中通过 AdminConsole 进行过滤。
您的查询未请求您想要的内容:
SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole
WHERE NOT EXISTS
(SELECT SectionAccess.Link, SectionAccess.UserID, AdminConsole.PPMID, AdminConsole.EPRID, AdminConsole.Proj_Name FROM SectionAccess
INNER JOIN AdminConsole ON SectionAccess.Link=AdminConsole.Link
WHERE SectionAccess.UserID = '" + Request["UserID"] + "');
如果用户至少有一个项目,则子查询会传递行。因此,不存在是错误的,在这种情况下,您将不会从 AdminConsole 获得任何行。
您必须按主要查询 AdminConsole.Link 过滤子查询。类似的东西:
SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole
WHERE NOT EXISTS
(SELECT SectionAccess.Link, SectionAccess.UserID FROM SectionAccess
WHERE SectionAccess.UserID = '" + Request["UserID"] + "' and
SectionAccess.Link=AdminConsole.Link);