2 つのテーブルがあります。
Employee
(id_employee, worker_name)
Groups
(id_employee, group_name)
作成スクリプトは次のとおりです。
CREATE TABLE Employee (
id_employee int identity(1,1) NOT NULL CONSTRAINT PK_Employee PRIMARY KEY CLUSTERED,
worker_name nvarchar(100) CONSTRAINT UQ_Employee_worker_name UNIQUE
);
CREATE TABLE Groups (
id_employee int NOT NULL CONSTRAINT FK_Groups_id_employee FOREIGN KEY REFERENCES Employee (id_employee),
group_name varchar(10) NOT NULL,
CONSTRAINT PK_Groups PRIMARY KEY CLUSTERED (group_name, id_employee)
);
INSERT Employee
SELECT 'worker 1'
UNION ALL SELECT 'worker 2'
UNION ALL SELECT 'worker 3'
UNION ALL SELECT 'worker 4';
INSERT Groups
SELECT 1, 'a1'
UNION ALL SELECT 2, 'a1'
UNION ALL SELECT 3, 'a2'
UNION ALL SELECT 4, 'a2'
UNION ALL SELECT 1, 'b1'
UNION ALL SELECT 2, 'b1'
UNION ALL SELECT 3, 'b2'
UNION ALL SELECT 4, 'b2'
UNION ALL SELECT 2, 'b3'
UNION ALL SELECT 3, 'b3'
UNION ALL SELECT 4, 'b3';
id_group
特定の場合、まったく同じ従業員を持つ他のすべてのグループを返すクエリが必要です。
例えば:
SELECT for 'a1'
-> 両方のグループにワーカー 1 とワーカー 2 があるため、'b1' を返す必要があります。
SELECT for 'a2'
-> 両方のグループにワーカー 3 とワーカー 4 があるため、'b2' を返す必要があります。
グループはまったく同じである必要があり、すべてのメンバーが含まれている必要があり、両方のグループのサイズも同じである必要があることに注意してa1
くださいb1
。