我觉得麻烦就在这里
WHERE Description = (SELECT Task FROM datatables.DefaultTask Where Department_Id = 5)
AND Project_ID = (SELECT sp.id FROM datatables.SoftwareProjects AS sp INNER JOIN S4Admin.Project AS p ON sp.s4_project_id = p.Project_Code WHERE p.Project_Code = 2294)
我认为您的查询不正确。我建议尝试使用另一种方式
--INSERT INTO datatables.SoftwareProjects_Tasks (Description, Project_ID, Task_Status)
SELECT a.Task,a.Project_ID,3 AS Task_Status
FROM
(
SELECT t.Task,p.Project_ID
FROM datatables.DefaultTask AS t,
(
SELECT sp.id AS Project_ID
FROM datatables.SoftwareProjects AS sp
JOIN S4Admin.Project AS p ON sp.s4_project_id = p.Project_Code
WHERE p.Project_Code=2294
) AS p
WHERE t.Department_Id=5
) a
LEFT JOIN SoftwareProjects_Tasks b ON b.Description=a.Task AND b.Project_ID=a.Project_ID
WHERE b.Project_ID IS NULL
如果您的 MySQL 版本支持,您可以尝试使用 MINUS 运算符
--INSERT INTO datatables.SoftwareProjects_Tasks (Description, Project_ID, Task_Status)
SELECT Task,Project_ID,3
FROM
(
SELECT t.Task,p.Project_ID
FROM datatables.DefaultTask AS t,
(
SELECT sp.id AS Project_ID
FROM datatables.SoftwareProjects AS sp
JOIN S4Admin.Project AS p ON sp.s4_project_id = p.Project_Code
WHERE p.Project_Code=2294
) AS p
WHERE t.Department_Id=5
MINUS
SELECT Description,Project_ID
FROM SoftwareProjects_Tasks
) q
请参阅以下有关 MySQL 中的 MINUS 的文章 - http://gokhanatil.com/2010/10/minus-and-intersect-in-mysql.html
还有一个带有NOT EXISTS的变体
--INSERT INTO datatables.SoftwareProjects_Tasks (Description, Project_ID, Task_Status)
SELECT t.Task,p.Project_ID,3 AS Task_Status
FROM datatables.DefaultTask AS t,
(
SELECT sp.id AS Project_ID
FROM datatables.SoftwareProjects AS sp
JOIN S4Admin.Project AS p ON sp.s4_project_id = p.Project_Code
WHERE p.Project_Code=2294
) AS p
WHERE t.Department_Id=5
AND NOT EXISTS(
SELECT *
FROM SoftwareProjects_Tasks b
WHERE b.Description=t.Task AND b.Project_ID=p.Project_ID
)
希望我理解正确。
也许您需要为带有Project_ID 的子查询添加DISTINCT
(
SELECT DISTINCT sp.id AS Project_ID
FROM datatables.SoftwareProjects AS sp
JOIN S4Admin.Project AS p ON sp.s4_project_id = p.Project_Code
WHERE p.Project_Code=2294
) AS p