以下是我目前掌握的情况:

INSERT INTO Tenants (LeaseStartDate, LeaseExpirationDate, Rent, LeaseTenantSSN, RentOverdue)
SELECT CURRENT_DATE, NULL, NewRentPayments.Rent, NewRentPayments.LeaseTenantSSN, FALSE from NewRentPayments
WHERE NOT EXISTS (SELECT * FROM Tenants, NewRentPayments WHERE NewRentPayments.HouseID = Tenants.HouseID AND
NewRentPayments.ApartmentNumber = Tenants.ApartmentNumber)

所以,HouseID和ApartmentNumber一起构成主键。如果表B中的元组(NeWrEnTrimes)不存在于基于主键的表A(租户)中,则需要将其插入租户。
问题是,当我运行查询时,它没有插入任何内容(我知道应该插入1个元组)。我茫然不知所措,因为看起来应该行得通。
谢谢。

最佳答案

子查询不相关-它只是一个不相关的联接查询。
根据对您的问题的描述,您不需要此联接。
试试这个:

insert into Tenants (LeaseStartDate, LeaseExpirationDate, Rent, LeaseTenantSSN, RentOverdue)
select current_date, null, p.Rent, p.LeaseTenantSSN, FALSE
from NewRentPayments p
where not exists (
        select *
        from Tenants t
        where p.HouseID = t.HouseID
            and p.ApartmentNumber = t.ApartmentNumber
        )

关于postgresql - 如果表B元组的主键在元组A中不存在,我试图将元组插入表A(来自表B),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42478247/

10-08 23:01