Subselect on the same entity

Posts   
 
    
epitka
User
Posts: 19
Joined: 13-Feb-2007
# Posted on: 06-Apr-2007 23:35:04   

Ok guys I need help constructing filter for the following query. What I am trying to get is a list of userids that are 'External' users and that are for one of the 'Clients' in the list.

SELECT DISTINCT  [Users].[UserID] AS [UserId]
FROM (( [Users]  
INNER JOIN [UserProfile]  
    ON  [Users].[UserID]=[UserProfile].[UserID]) 
INNER JOIN [ProfilePropertyDefinition]  
    ON  [ProfilePropertyDefinition].[PropertyDefinitionID]=[UserProfile].[PropertyDefinitionID]) 
WHERE  [ProfilePropertyDefinition].[PortalID] = 0 
AND [ProfilePropertyDefinition].[PropertyName] = 'UserType' AND [UserProfile].[PropertyValue] = 'External'
AND Users.UserId IN
    (SELECT Users.UserId
        FROM Users
        INNER JOIN [UserProfile]  
            ON  [Users].[UserID]=[UserProfile].[UserID] 
        INNER JOIN [ProfilePropertyDefinition]  
            ON  [ProfilePropertyDefinition].[PropertyDefinitionID]=[UserProfile].[PropertyDefinitionID]
        WHERE
             [ProfilePropertyDefinition].[PropertyName] = 'Client' AND [UserProfile].[PropertyValue] IN ('Allen ISD', 'Fort Worth ISD'))

Here is the schema for UserProfile and ProfilePropertyDefinition tables

ProfilePropertyDefinition:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ProfilePropertyDefinition](
    [PropertyDefinitionID] [int] IDENTITY(1,1) NOT NULL,
    [PortalID] [int] NULL,
    [ModuleDefID] [int] NULL,
    [Deleted] [bit] NOT NULL,
    [DataType] [int] NOT NULL,
    [DefaultValue] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [PropertyCategory] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [PropertyName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Length] [int] NOT NULL CONSTRAINT [DF_ProfilePropertyDefinition_Length]  DEFAULT (0),
    [Required] [bit] NOT NULL,
    [ValidationExpression] [nvarchar](2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [ViewOrder] [int] NOT NULL,
    [Visible] [bit] NOT NULL,
 CONSTRAINT [PK_ProfilePropertyDefinition] PRIMARY KEY CLUSTERED 
(
    [PropertyDefinitionID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [db_DCS_PowerFleet_Portal]
GO
ALTER TABLE [dbo].[ProfilePropertyDefinition]  WITH CHECK ADD  CONSTRAINT [FK_ProfilePropertyDefinition_Portals] FOREIGN KEY([PortalID])
REFERENCES [dbo].[Portals] ([PortalID])
ON DELETE CASCADE

UserProfile:

/****** Object:  Table [dbo].[UserProfile]  Script Date: 04/06/2007 16:24:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserProfile](
    [ProfileID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NOT NULL,
    [PropertyDefinitionID] [int] NOT NULL,
    [PropertyValue] [nvarchar](3750) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [PropertyText] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Visibility] [int] NOT NULL CONSTRAINT [DF__UserP__Visib__1352D76D]  DEFAULT (0),
    [LastUpdatedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_UserProfile] PRIMARY KEY NONCLUSTERED 
(
    [ProfileID] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
USE [db_DCS_PowerFleet_Portal]
GO
ALTER TABLE [dbo].[UserProfile]  WITH NOCHECK ADD  CONSTRAINT [FK_UserProfile_ProfilePropertyDefinition] FOREIGN KEY([PropertyDefinitionID])
REFERENCES [dbo].[ProfilePropertyDefinition] ([PropertyDefinitionID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[UserProfile] CHECK CONSTRAINT [FK_UserProfile_ProfilePropertyDefinition]
GO
ALTER TABLE [dbo].[UserProfile]  WITH NOCHECK ADD  CONSTRAINT [FK_UserProfile_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[UserProfile] CHECK CONSTRAINT [FK_UserProfile_Users]

Here what this select yields


SELECT DISTINCT  [Users].[UserID] AS [UserId],
    [ProfilePropertyDefinition].[PropertyName],
     [UserProfile].[PropertyValue]
FROM (( [Users]  
INNER JOIN [UserProfile]  
    ON  [Users].[UserID]=[UserProfile].[UserID]) 
INNER JOIN [ProfilePropertyDefinition]  
    ON  [ProfilePropertyDefinition].[PropertyDefinitionID]=[UserProfile].[PropertyDefinitionID])



1   FirstName   SuperUser
1   LastName    Account
1   PreferredLocale en-US
1   TimeZone    0
2   FirstName   Administrator
2   LastName    Account
2   PreferredLocale en-US
2   TimeZone    -480
28  Client  Allen ISD
28  Organization    Wilson Elementary School
28  Position    Security Administrator
28  PreferredLocale en-US
28  TimeZone    -480
28  UserType    External
29  Organization    Wilson Elementary School
29  UserType    External
30  Client  Allen ISD
30  Organization    Wilson Elementary School
30  Position    teacher
30  UserType    External
31  Client  Allen ISD
31  Organization    Wilson Elementary School
31  Position    teacher
31  UserType    External
32  Telephone   4696282125
32  UserType    Internal

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 08-Apr-2007 20:53:10   

You can use FieldCompareSetPredicate (http://www.llblgen.com/TinyForum/Messages.aspx?ThreadID=9495) and TypedList (LLBLGenPro Help - Adapter|SS - Using TypedList - TypedViews and Dynamic Lists - Using typed list classes.

Tell us if you can make it.

David Elizondo | LLBLGen Support Team