他のデータベーステーブルにない1つのデータベーステーブルからデータを取得したいという状況が発生しました。そのために私はNOTIN句を使用しています。これは、少量のデータに対しては正常に機能します。テーブルに大きなデータがある場合、非常に時間がかかります。2000行をチェックしましたが、8分以上かかります。NOTIN句のせいでかなりの時間がかかると思います。誰かがこれをできるだけ早く行うための代替方法を提案してください。
編集:スキーマに小さな変更があります。dept_project_tasksには、関連付けテーブルのIDがあります(デフォルトのIDが付属するレールを使用しています)
DBとクエリの詳細は次のとおりです:(同じもののSqlfiddleリンク:ここをクリックしてください。同じsqlfiddleページで変更しないでください)
データベース1:
create table TASKS(task_code VARCHAR(20), task_name VARCHAR(20), project_name VARCHAR(20),dept_code VARCHAR(20));
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task1", "task1", "project1", "dept1");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task1", "task1", "project1", "dept2");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task2", "task2", "project2", "dept1");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task2", "task2", "project2", "dept3");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task3", "task3", "project3", "dept2");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task3", "task3", "project3", "dept1");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task4", "task4", "project4", "dept1");
insert into TASKS(task_code, task_name, project_name, dept_code) VALUES("task4", "task4", "project4", "dept3");
データベース2:
create table depts(dept_code VARCHAR(20), dept_name VARCHAR(20));
create table project_tasks(task_code VARCHAR(20), task_name VARCHAR(20));
create table dept_project_tasks(dept_code VARCHAR(20), task_code VARCHAR(20));
insert into depts(dept_code, dept_name) values("dept1", "dept_one");
insert into depts(dept_code, dept_name) values("dept2", "dept_two");
insert into project_tasks(task_code, task_name) values("task1", "task1");
insert into project_tasks(task_code, task_name) values("task2", "task2");
insert into project_tasks(task_code, task_name) values("task3", "task3");
insert into dept_project_tasks(dept_code, task_code) values("dept1", "task1");
insert into dept_project_tasks(dept_code, task_code) values("dept2", "task1");
insert into dept_project_tasks(dept_code, task_code) values("dept1", "task2");
insert into dept_project_tasks(dept_code, task_code) values("dept3", "task2");
クエリは次のとおりです。
SELECT distinct task_code
from TASKS as TS
where TS.dept_code="dept1"
AND TS.task_code NOT IN (SELECT `project_tasks`.task_code
FROM `project_tasks`
INNER JOIN `dept_project_tasks` ON `project_tasks`.task_code = `dept_project_tasks`.task_code
WHERE `dept_project_tasks`.dept_code = "dept1"
);
前もって感謝します