![](/img/trans.png)
[英]Format JSONB column by taking the text value from same jsonb coulmn
[英]Search for value in column 1 use value from coulmn 2 to find other rows with same values in column 2
我有一個包含3個表的簡單數據庫。
Person (personId[PK], Name, other stuff)
Addresses (AddressId[PK], roade, number, other stuff)
Residents ( personId[FK],AddressId[FK]) The two columns are the PK
我需要能夠從數據庫和他的地址中刪除一個人,如果他是唯一一個住在那里的人。 因此,我需要確定是否有更多人居住在同一地址。 如果是,則保留它,如果不刪除地址。
我當時在想
我想使用其名稱刪除表Person中的Person。Delete person WHERE Name ='John'; 然后,這還應該刪除“居民”中與Johns personId相匹配的任何行。 現在,約翰在“居民”表中還有一個或多個與他相關的地址。 現在,當我刪除John時,我需要刪除“地址”表中他連接的所有地址。 作為最后一個約束,我需要確保沒有其他人連接到我將要刪除的地址。 如果連接了另一個人,則不應刪除表“地址”中的地址
查找不止一個人的地址:
select r.AddressId
from Residents r
group by r.AddressId
having count(*) > 1;
要獲得所有人員,您可以執行以下操作:
selects personId
from Residents r join
(select r.AddressId
from Residents r
group by r.AddressId
having count(*) > 1
) a
on r.AddressId = a.AddressId;
如果問題是要使“ Addresses
表中沒有未使用的條目,則可以簡單地刪除“ Residents
沒有引用的那些行(一旦刪除了后者)。
因此,假設您的外鍵未使用ON DELETE CASCADE
定義,則首先從Residents
刪除:
DELETE FROM Residents
WHERE personId IN (
SELECT personId
FROM Person
WHERE Name = 'Name'
);
然后,您可以像這樣從Adresses
刪除:
DELETE FROM Addresses
WHERE NOT EXISTS (
SELECT *
FROM Residents
WHERE Residents.AddressId = Addresses.AddressId
);
並且,當然,您還刪除了“ Person
條目本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.