一个从其他表值中删除表行的查询

wmomyfyw  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(270)

我使用php我的管理员我真的很感激任何建议或帮助我试图删除地址,是不是在使用的基础上从另一个表列,也可以删除,如果没有在其他列值中找到
我有两张这样的table:
t包边

id         Address 
1222       add1
1332       add2
1555       add3
1776       add4

tblcx公司

name       location    Status
ana        1222        completed
ema        1332        used
ada        1332        completed

我想从tbladdress中删除id等于tblcx location的行,其中tblcx status已完成,而如果使用了tblcx status,则不能执行任何删除操作
期望输出

tbladdress

id         Address 
1332       add2

id 1332未被删除,因为它仍被另一个客户使用1555和1776被删除,因为它不存在于其他表中1222被删除,因为状态已完成
我正在使用此查询

DELETE t1
FROM tbladdress t1 
    INNER JOIN tblcx t2 
        ON t1.ID = t2.location and t2.Status = 'Completed';

这是工作正常,但我还想删除的id是没有找到tblcxlocation
我希望它像在一个查询我真的很感谢任何建议或帮助

DELETE FROM tbladdress
WHERE NOT EXISTS (
    SELECT *
    FROM tblcx
    WHERE (tbladdress.id != tblcx.location)
);
h7wcgrx3

h7wcgrx31#

你需要一个 LEFT JOIN 相反,检查 t2.location 存在 NULL (即没有匹配的 t1.ID ):

DELETE t1
FROM tbladdress t1 
LEFT JOIN tblcx t2 ON t1.ID = t2.location
WHERE t2.Status = 'Completed' OR t2.location IS NULL
lztngnrs

lztngnrs2#

你可以用 EXISTS 检查状态为的记录 'used' 存在于 tblscx 找个地址。我想,所有不存在此类记录的地址都是您要删除的地址。所以用 NOT .

DELETE FROM tbladdress
            WHERE NOT EXISTS (SELECT *
                                     FROM tblscx
                                     WHERE tblscx.location = tbladdress.id
                                           AND tblscx.status = 'used');

相关问题