簡體   English   中英

MySQL更新表並在子查詢中從同一表中選擇

[英]MySQL update a table and select from the same table in a subquery

我有鏈接表

CREATE TABLE `linktable` (
`id ` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`idParent` BIGINT(20) UNSIGNED NOT NULL,
`Role` ENUM('Contacts','Expert','...') NULL DEFAULT NULL,
`idChild` BIGINT(20) UNSIGNED NOT NULL,
PRIMARY KEY (`idt`),
UNIQUE INDEX `UK_Parent_Child_Role` (`idParent`, `idChild`, `Role`)
)

我想更新此表,並且不要破壞唯一鍵。 與其他數據庫,我做這樣的事情:

Update linktable lt1 Set lt1.Parent = :ziNew Where lt1.idParent = :ziOld
and not exists (select * from linktable lt2 where lt2.idParent = :ziNew and lt1.role = lt2.role and lt1.idChild = lt2.idChild);

如何使用MySQL做到這一點?

對變量使用相同的語法,可以通過聯接來實現:

Update linktable lt1 left outer join
       (select *
        from linktable lt2
         where lt2.idParent = :ziNew
       ) lt2
       on lt1.role = lt2.role and lt1.idChild = lt2.idChild
    Set lt1.Parent = :ziNew
    Where lt1.Parent =:ziOld and lt2.idParent is null;

MySQL中的問題是子查詢與update d表是同一表。 如果它是另一個表, not exists的原始表單仍然可以使用。

暫無
暫無

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

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