2016-06-21 53 views
0

我有2 tables,分別命名爲SectionAccessAdminConsole。 SectionAccess包含字段選擇行不存在條件從2表

- User Access 
- User ID 
- Link. 

1用戶ID可以有幾個鏈接。 AdminConsole有場

- Link 
- Project ID (PPMID) 
- Application ID (EPRID) 
- Project Name. 

每個環節都有一個獨特的項目。

我使用Razor,用戶可以在自己的用戶ID鍵,網頁將顯示目前正在表中的用戶ID項目創建webpage。我所做的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

你是你的子查詢中再次加入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); 
+0

這樣做的伎倆。謝謝! –

0

試着離開了參加在子查詢:

SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole 
WHERE Link NOT IN 
(SELECT SectionAccess.Link FROM SectionAccess 
WHERE SectionAccess.UserID = '" + Request["UserID"] + "'); 
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 WHERE SectionAccess.UserID類似於('%'+ Request [「UserID」] +「%');

相關問題