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

时间:2018-08-13 21:40:11

标签: mysql sql phpmyadmin

我正在使用php作为管理员,我非常感谢任何建议或帮助,我正在尝试根据另一个表中的列删除未使用的地址,如果在其他列值中找不到,也可以删除该地址

我有2张这样的桌子:

tbladdress

id         Address 
1222       add1
1332       add2
1555       add3
1776       add4

tblcx

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

我想从id等于tblcx状态完成的tblcx位置的tbladdress删除行,而如果使用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';

工作正常,但我也想删除在tblcxlocation中找不到的ID

我希望能在一个查询中得到任何建议或帮助

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

2 个答案:

答案 0 :(得分:1)

您可以使用tree.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // get the selected item TreeItem item = (TreeItem) e.item; if(item != null) { ... 来检查地址EXISTS中是否存在状态为'used'的记录。我想所有不存在此类记录的地址都是您要删除的地址。因此,用tblscx对表达式求反。

NOT

答案 1 :(得分:1)

您可以改用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