3 つのテーブルがあるとします。
User Table
{
UserId INT,
Username NVARCHAR
...
}
Questions
{
QuestionId INT
QuestionText NVARCHAR
}
Answers
{
AnswerId INT,
QuestionId INT,
UserId INT,
Answer NVARCHAR
}
この構造は明らかに過度に単純化されていますが、この例の目的には十分です。
たとえば、特定の質問に対して特定の回答を持っているユーザーを選択する最善の方法は何でしょうか - テーブルに次のデータが入力されていると仮定します。
ユーザーテーブル
UserId Username ...
--------------------------------------------------------------------------------------------------------
1 User1 ...
2 User2 ...
3 User3 ...
4 User4 ...
5 User5 ...
6 User6 ...
7 User7 ...
8 User8 ...
9 User9 ...
10 User10 ...
... ... ...
etc
質問表
QuestionId QuestionText
--------------------------------------------------------------------------------------------------------
1 What is your favorite color?
2 What do you prefer cats or dogs?
3 Do you prefer if it is too hot or too cold?
4 What is your favorite season (Summer, Autumn (Fall), Winter, Spring)?
5 How Old Are you?
... ...
etc
回答表
AnswerId QuestionId UserId Answer
--------------------------------------------------------------------------------------------------------
1 1 1 Red
2 1 2 Red
3 1 3 Blue
4 1 4 Green
5 1 5 Black
6 2 6 Cats
7 2 1 Dogs
8 3 1 Too Cold
9 4 1 Spring
10 5 1 22
11 2 4 Dogs
12 3 4 Too Hot
13 3 3 Too Cold
14 5 6 46
15 1 8 Purple
犬と赤や紫が好きで50歳未満のユーザーを選択したい場合など
これを行う最善の (最も効率的な) 方法は、ユーザー テーブルから回答テーブルへの複数の結合 (必要な回答条件ごとに 1 つ) を行うことでしょうか。
例えば:
犬と赤が好きなユーザーを獲得したい場合は、次の MSSQL を使用できます。
SELECT *
FROM
Users
JOIN Answers As a1
ON Users.UserId = a1.UserId
JOIN Answers as a2
ON Users.UserId = a2.UserId
WHERE
(
a1.QuestionId = 1 AND
a1.Answer = 'Red'
) AND
(
a2.QuestionId = 2 AND
a2.Answer = 'Dogs'
)
多数の回答条件が存在する可能性があります。
基本的に私が求めている質問は、同じ列を持つ同じテーブルの複数の行に条件があるクエリを作成する最良の方法は何ですか...
わかりにくい場合は申し訳ありませんが、ご不明な点がございましたら、お気軽にお問い合わせください。できる限りお答えします...
ありがとう。