我有 2 个表如下 -
CREATE TABLE IF NOT EXISTS `nl_members` (
`member_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`member_email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`member_confirmation_code` varchar(35) COLLATE utf8_unicode_ci NOT NULL,
`member_enabled` enum('Yes','No') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Yes',
PRIMARY KEY (`member_id`),
UNIQUE KEY `TUC_nl_members_1` (`member_email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=58520 ;
CREATE TABLE IF NOT EXISTS `nl_member_group_xref` (
`group_id` int(10) unsigned NOT NULL,
`member_id` int(10) unsigned NOT NULL,
`member_subscribed` enum('Yes','No') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Yes',
`subscribe_date` int(10) unsigned NOT NULL DEFAULT '0',
`unsubscribe_date` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`group_id`,`member_id`),
KEY `nl_members_nl_member_group_xref` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `nl_member_group_xref`
ADD CONSTRAINT `nl_members_nl_member_group_xref` FOREIGN KEY (`member_id`) REFERENCES `nl_members` (`member_id`),
ADD CONSTRAINT `nl_member_groups_nl_member_group_xref` FOREIGN KEY (`group_id`) REFERENCES `nl_member_groups` (`group_id`);
两者都有关于数百万的大量数据。
我想要的是高效地将 MINUS 应用于结果集。
例如,
我想获取 ID 为 Group1 的所有用户:1 减去 ID 为 2 的 Group2 和 ID 为 Group3 的所有用户:3
我怎样才能有效地做到这一点?尽可能快地运行查询。
更新
我想要的是这样的-
在成员表“nl_members”中,我保留了所有成员的列表,这些成员可能与一个或多个组相关联。
对于成员的每个组关联,“nl_member_group_xref”表中将有一行。
因此,如果一个成员与 3 个组相关联,则 member_group_xref 表中将有 3 个条目。
现在我想要的是让所有成员都包含在第 1 组中,但如果成员也属于第 2 组和第 3 组,则排除他们。
希望这可以帮助。