簡體   English   中英

一個查詢以從其他表值中刪除表行

[英]One Query to delete table row based from other table value

我正在使用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)
);

您可以使用EXISTS檢查地址是否在tblscx存在狀態為'used'的記錄。 我想所有不存在此類記錄的地址都是您要刪除的地址。 因此,用NOT否定表達式。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM