最初からデータを正規化します。長期的には大きな利益をもたらします。このようにして、通常どおりデータを維持およびクエリできます。
簡略化された形式で提案されたスキーマは、次のようになります
CREATE TABLE users
(
`user_id` int not null auto_increment primary key,
`user_name` varchar(5)
);
CREATE TABLE teams
(
`team_id` int not null auto_increment primary key,
`team_name` varchar(5)
);
CREATE TABLE team_users
(
`team_id` int,
`user_id` int,
primary key (team_id, user_id),
foreign key (team_id) references teams (team_id),
foreign key (user_id) references users (user_id)
);
「team2」という名前のチームのすべてのメンバーをプルする必要がある場合
SELECT t.team_id, t.team_name, u.user_id, u.user_name
FROM team_users tu JOIN teams t
ON tu.team_id = t.team_id JOIN users u
ON tu.user_id = u.user_id
WHERE t.team_name = 'team2'
user_id = 2
ユーザーがメンバーであるチームのすべてのメンバーを取得する必要がある場合
SELECT t.team_id, t.team_name, u.user_id, u.user_name
FROM team_users tu JOIN team_users tu2
ON tu.team_id = tu2.team_id JOIN teams t
ON tu.team_id = t.team_id JOIN users u
ON tu.user_id = u.user_id
WHERE tu2.user_id = 2
出力例:
| | チーム ID | チーム名 | ユーザー ID | ユーザー名 |
|---------|-----------|---------|-----------|
| | 2 | チーム2 | 2 | ユーザー2 |
| | 2 | チーム2 | 4 | ユーザー4 |
| | 2 | チーム2 | 5 | ユーザー5 |
これがSQLFiddleのデモです