2016-06-21 11 views
0

私はとAdminConsoleという名前の2つのtablesを持っています。 SectionAccessにはフィールドが含まれていますSELECT行2つのテーブルから存在しない条件

- User Access 
- User ID 
- Link. 

1ユーザーIDにはいくつかのリンクがあります。 AdminConsoleは、各リンクは独自のプロジェクトを持っている分野

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

を持っています。

私はRazorを使用してwebpageを作成しています。ここでユーザはユーザIDを入力することができ、Webページには現在そのユーザ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"] + "'); 

ここで問題は何ですか?

SELECT Link, PPMID, EPRID, Proj_Name FROM AdminConsole 
WHERE Link NOT IN 
(SELECT SectionAccess.Link FROM SectionAccess 
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"] + "'); 

あなたのサブクエリが、行を届けるん。したがって、存在していない場合はfalseであり、この場合は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

は、サブクエリに参加除外するようにしてください。これは、サブクエリ内の行の有無のみをチェックしているため、trueまたはfalseを返すことができます。

あなたは

SectionAccess INNER FROM SELECT SectionAccess.Link、SectionAccess.UserID、AdminConsole.PPMID、AdminConsole.EPRID、AdminConsole.Proj_Name登録しようAdminConsole ON SectionAccess.Link = AdminConsole.Link

EXCEPT使用することができます

EXCEPT SELECT SectionAccess.Link、SectionAccess.UserID、AdminConsole.PPMID、AdminConsole.EPRID、AdminConsole.Proj_Name SectionAccess INNER FROM SectionAccess.Link = AdminConsole.Link ON AdminConsoleをJOIN WHERE SectionAccess.UserID like( '% "+ Request [" UserID "] +"% ");

0

はNULLを返すことができない存在:

関連する問題