נתונה רשימה של מאפיינים (PropertiesId) למשל 1,3,6
א. אנו רוצים לקבל את כל המשתמשים שמוגדר להם לפחות מאפיין אחד מהרשימה.
ב. אנו רוצים לקבל את כל המשתמשים שמוגדרים להם כל המאפיינים מהרשימה שלנו
מבנה האלמנטים במסד הנתונים DDL:
/************************************************ DDL */
CREATE
TABLE
[dbo].[Zimmers](
[UserId] [
int
] IDENTITY(1,1)
NOT
NULL
,
[UserName] [nvarchar](150)
NOT
NULL
,
)
CREATE
TABLE
[dbo].[UserProperty](
[PropertyId] [
int
] IDENTITY(1,1)
NOT
NULL
,
[PropertyName] [nvarchar](100)
NULL
,
[CategoryId] [
int
]
NULL
,
)
CREATE
TABLE
[dbo].[UserProperties](
[UserId] [
int
]
NOT
NULL
,
[PropertyId] [
int
]
NOT
NULL
)
-- השאילתות לא מראות שום קשר בין הטבלאות
-- מאוד מומלץ לקשר טבלאות ברמת מסד הנתונים ולא רק ברמת האפליקציה חיצונית
הכנסת נתונים לדוגמה DML:
/************************************************ DML */
insert
[Zimmers] ([UserName])
values
(
'a'
)
insert
[Zimmers] ([UserName])
values
(
's'
)
insert
[Zimmers] ([UserName])
values
(
'd'
)
insert
[Zimmers] ([UserName])
values
(
'f'
)
insert
[Zimmers] ([UserName])
values
(
'g'
)
insert
[Zimmers] ([UserName])
values
(
'h'
)
insert
[Zimmers] ([UserName])
values
(
'j'
)
insert
[Zimmers] ([UserName])
values
(
'k'
)
insert
[Zimmers] ([UserName])
values
(
'e'
)
select
*
from
[Zimmers]
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ש'
,2)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ד'
,3)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ג'
,6)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'כ'
,2)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ע'
,2)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'י'
,5)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ח'
,6)
insert
[UserProperty] ([PropertyName],[CategoryId])
values
(
'ל'
,6)
select
*
from
[UserProperty]
insert
[UserProperties] ([UserId],[PropertyId])
values
(1,1)
insert
[UserProperties] ([UserId],[PropertyId])
values
(1,3)
insert
[UserProperties] ([UserId],[PropertyId])
values
(1,6)
insert
[UserProperties] ([UserId],[PropertyId])
values
(2,6)
insert
[UserProperties] ([UserId],[PropertyId])
values
(7,2)
insert
[UserProperties] ([UserId],[PropertyId])
values
(5,4)
insert
[UserProperties] ([UserId],[PropertyId])
values
(4,7)
select
*
from
[UserProperties]
נתונים שרוצים לקבל:
א. ניתן לראות בטבלה הקשר בין המאפיינים למשתמשים שרק למשתמש 1 ולמשתמש 2 לפחות אחת מהתכונות של המאפיינים ולכן נרצה לקבל:
ב. מבין המשתמשים שקיבלתנו בחלק א למשתמש 2 היתה אומנת תכונה מספר 6 אבל לא היו לו את תכונות 1 או 3. לעומת זאת למשתמש 1 היו את כל התכונות שאנו מחפשים ולכן בפתרון סעיף ב אנו רוצים לקבל את התוצאה: