【问题标题】:Delete row from sql table where values not found in another table with multiple joins从 sql 表中删除在具有多个连接的另一个表中找不到值的行
【发布时间】:2013-09-05 20:37:17
【问题描述】:

我有以下查询,它返回所需的数据。我想要做的是删除该数据,但是当我将 Select DQ.* 更改为 DELETE FROM DQ 时,我收到一个错误提示

'...不可更新,因为修改会影响多个基表'

我需要从 tbaccess_groupPermission 表中删除在 tbaccess_companyModules 表中找不到适当模块记录的条目。

WITH DQ AS
(
SELECT GP.* FROM tbaccess_groupPermission GP
JOIN tbaccess_groups G ON GP.GroupID = G.ID
WHERE G.CompanyID=6
AND GP.RoleName NOT IN
(
select Distinct(R.RoleName)
FROM tbAccess_Roles R
INNER JOIN tbAccess_CompanyModules C on R.ModuleID = C.ModuleID
WHERE C.CompanyID = 6) 
) 
SELECT * FROM DQ

【问题讨论】:

    标签: sql join exists delete-row


    【解决方案1】:

    为什么不将WITH 语句更改为使用IN 子句?

    类似

    WITH DQ AS
    (
    SELECT GP.* FROM tbaccess_groupPermission GP
    WHERE GP.GroupID IN (SELECT G.ID FROM tbaccess_groups G WHERE G.CompanyID=6)
    AND GP.RoleName NOT IN
    (
    select Distinct(R.RoleName)
    FROM tbAccess_Roles R
    INNER JOIN tbAccess_CompanyModules C on R.ModuleID = C.ModuleID
    WHERE C.CompanyID = 6) 
    ) 
    

    【讨论】:

    • 好的,我之前尝试过,但按照建议再次尝试 - 它成功了!谢谢!! '从 tbaccess_GroupPermission 中删除 ID 在'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多